Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Ohjelman Suorittaminen | Johdanto C-Kieleen
C:n Perusteet

bookOhjelman Suorittaminen

Note
Määritelmä

Kääntäjä on erikoisohjelma, joka muuntaa ihmisen luettavan C-lähdekoodin konekieleksi, jota suoritin voi ajaa. Tämä muunnosprosessi mahdollistaa kirjoitettujen ohjeiden muuttamisen suoritettavaksi tiedostoksi, jonka tietokone ymmärtää ja suorittaa.

Jotta koodi voidaan muuntaa suorittimen ymmärtämiksi komennoiksi, tarvitaan kääntäjä. Kääntäjä käsittelee koodin järjestyksessä ylhäältä alas. Käännösprosessi etenee useassa vaiheessa:

  • Esikäsittelyvaihe: kaikki #include-ohjeet käsitellään, jolloin ulkoiset tiedostot, kirjastot ja muut tarvittavat osat liitetään ohjelmaan;

  • Syntaksivirheiden tarkistus: kääntäjä tarkistaa syntaksivirheet ja keskeyttää käännöksen, jos virheitä löytyy, korostamalla ne korjausta varten;

  • Käännös suoritettavaan tiedostoon: ohjelma muunnetaan suoritettavaksi tiedostoksi (esim. .exe Windowsissa), jolloin sitä voidaan ajaa kuten mitä tahansa muuta sovellusta.

Suoritettava tiedosto on yksinkertaisesti sarja ohjeita (konekoodia), tarkoitettu prosessorille. Esimerkiksi lause "Hello, c<>definity" konekoodina saattaa muistuttaa jonoa.

program.exe

program.exe

copy
12
01001000011001010110110001101100011011110010110000100000011000110011110000111 110011001000110010101100110011010010110111001101001011101000111100100100001

Seuraavaan koodiin on lisätty tarkoituksellinen virhe havainnollistamaan, kuinka C-kääntäjä tunnistaa ja raportoi ongelmat.

Main.c

Main.c

copy
12345678
#include <stdio.h> int main() { printf("some text") // Error line return 0; }

Kääntäjä odottaa puolipistettä (;) viidennen rivin lopussa. Ilman sitä kääntäjä ei tunnista, mihin lause päättyy, ja käsittelee return 0; osana samaa riviä. Tämän seurauksena virheilmoitus ilmestyy seuraavalle riville, vaikka todellinen ongelma on puuttuva puolipiste printf-komennon jälkeen.

Main.c

Main.c

copy
12345678
#include <stdio.h> int main() { ;; ;;;;;; printf("C language\n");;; ;return 0; ;;; }

C-kääntäjä on varsin salliva ylimääräisten puolipisteiden suhteen. Vaikka ne saattavat näyttää oudolta, useita ; käsitellään tyhjinä lauseina, eikä niillä ole vaikutusta ohjelman toimintaan. Koodi kääntyy ja suorittuu silti ongelmitta, mutta ylimääräisten puolipisteiden välttäminen on hyvä tapa pitää koodi siistinä ja luettavana.

question mark

Mitkä ovat käännösprosessin vaiheet?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 3

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Awesome!

Completion rate improved to 2.63

bookOhjelman Suorittaminen

Pyyhkäise näyttääksesi valikon

Note
Määritelmä

Kääntäjä on erikoisohjelma, joka muuntaa ihmisen luettavan C-lähdekoodin konekieleksi, jota suoritin voi ajaa. Tämä muunnosprosessi mahdollistaa kirjoitettujen ohjeiden muuttamisen suoritettavaksi tiedostoksi, jonka tietokone ymmärtää ja suorittaa.

Jotta koodi voidaan muuntaa suorittimen ymmärtämiksi komennoiksi, tarvitaan kääntäjä. Kääntäjä käsittelee koodin järjestyksessä ylhäältä alas. Käännösprosessi etenee useassa vaiheessa:

  • Esikäsittelyvaihe: kaikki #include-ohjeet käsitellään, jolloin ulkoiset tiedostot, kirjastot ja muut tarvittavat osat liitetään ohjelmaan;

  • Syntaksivirheiden tarkistus: kääntäjä tarkistaa syntaksivirheet ja keskeyttää käännöksen, jos virheitä löytyy, korostamalla ne korjausta varten;

  • Käännös suoritettavaan tiedostoon: ohjelma muunnetaan suoritettavaksi tiedostoksi (esim. .exe Windowsissa), jolloin sitä voidaan ajaa kuten mitä tahansa muuta sovellusta.

Suoritettava tiedosto on yksinkertaisesti sarja ohjeita (konekoodia), tarkoitettu prosessorille. Esimerkiksi lause "Hello, c<>definity" konekoodina saattaa muistuttaa jonoa.

program.exe

program.exe

copy
12
01001000011001010110110001101100011011110010110000100000011000110011110000111 110011001000110010101100110011010010110111001101001011101000111100100100001

Seuraavaan koodiin on lisätty tarkoituksellinen virhe havainnollistamaan, kuinka C-kääntäjä tunnistaa ja raportoi ongelmat.

Main.c

Main.c

copy
12345678
#include <stdio.h> int main() { printf("some text") // Error line return 0; }

Kääntäjä odottaa puolipistettä (;) viidennen rivin lopussa. Ilman sitä kääntäjä ei tunnista, mihin lause päättyy, ja käsittelee return 0; osana samaa riviä. Tämän seurauksena virheilmoitus ilmestyy seuraavalle riville, vaikka todellinen ongelma on puuttuva puolipiste printf-komennon jälkeen.

Main.c

Main.c

copy
12345678
#include <stdio.h> int main() { ;; ;;;;;; printf("C language\n");;; ;return 0; ;;; }

C-kääntäjä on varsin salliva ylimääräisten puolipisteiden suhteen. Vaikka ne saattavat näyttää oudolta, useita ; käsitellään tyhjinä lauseina, eikä niillä ole vaikutusta ohjelman toimintaan. Koodi kääntyy ja suorittuu silti ongelmitta, mutta ylimääräisten puolipisteiden välttäminen on hyvä tapa pitää koodi siistinä ja luettavana.

question mark

Mitkä ovat käännösprosessin vaiheet?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 3
some-alt