next up previous contents
Nästa: 14.2 Variabler Upp: 14. De första programmen Förra: 14. De första programmen

14.1 Hej, världen!

Som ett inledande exempel på C-programmering ska vi ge ett program som helt enkelt skriver ut texten ''Hej, världen''. Vi skapar en fil med namnet hejvärlden.c och med följande innehåll:

/* Detta är mitt första C-program!!! */
#include <stdio.h>

int main(int argc,char *argv[])
{
  printf("Hej, världen!\n");
  return 0;
}

En kort förklaring av programmet ges nedan. Men låt oss först prova det! Programmet kompileras med kommandot$ gcc hejvärlden.c
$
Vid kompileringen översätts programmets källkod (texten som finns i filen hejvärlden.c) till maskininstruktioner som kan köras direkt av datorns processor. Det program som gör översättningen, kompilatorn, heter gcc. Det kompilerade programmet sparas i en ny, exekverbar fil med namnet a.out. Vi kontrollerar detta och kör sedan den filen:$ ls
a.out* hejvärlden.c
$ a.out
Hej, världen!
$

Kompileringen av C-program är en process som är uppdelad i flera steg. Först körs preprocessorn som tolkar direktiv (de rader som inleds med tecknet #) och tar bort kommentarer från C-filen. Därefter översätts C-programmet till så kallad assemblerkod, som i sin tur översätts till rena maskininstruktioner. Det sista steget är länkningen, som skapar det exekverbara programmet.

Det är nu dags att förklara programmet ovan. Den första raden är en kommentar. Allt som skrivs mellan tecknen /* och tecknen */ tas bort av preprocessorn och påverkar därför inte programmet. Raden som inleds med #include läser in så kallade deklarationer som kompilatorn behöver känna till. Vi ska senare diskutera detta närmare. Tills vidare får vi helt enkelt acceptera att det i början av C-program ofta förekommer ett antal rader av formen #include <namn.h>. Deklarationerna i stdio.h gäller inmatning och utskrift. Nästan alla C-program behöver dem. Själva programmet finns mellan klamrarna efter raden som inleds med int main. Det som står mellan parenteserna efter main är till för eventuella argument man ger programmet, vi återkommer till det. Programmets första instruktion, printf("Hej, världen!\n"), skriver ut texten ''Hej, världen''. Tecknen \n i slutet av textsträngen flyttar fram utskriftspositionen till en ny rad. Varje instruktion avslutas med ett semikolon, och blir därigenom vad som kallas för en sats. Den andra instruktionen, return 0, avslutar programmet och markerar slutstatus 0.

Det finns en fundamental skillnad mellan tex Bash-program och C-program: de förra interpreteras, de senare kompileras. Bash-program måste vid exekveringen tolkas av ett annat program, av Bash. Däremot står C-program på egna ben, efter kompileringen är de körklara och de behöver inte tolkas av något yttre program. En fördel med kompilerade program är att de vanligtvis är mycket snabbare än interpreterade program. En nackdel är att det brukar vara svårare, och ta längre tid, att skriva program som ska kompileras.

Det är oerhört viktigt att källkoden, och inte bara det kompilerade programmet, hålls tillgänglig. Det är nämligen i princip omöjligt att göra någon ändring i den kompilerade filen. Vill man ändra något i programmet, så måste man göra ändringen i källkoden och därefter kompilera om programmet. Det färdigkompilerade programmet är maskinberoende, tex kan program som kompilerats för en Intel-processor inte köra på en Motorola-processor. Däremot är källkoden sällan maskinberoende, dvs den kan kopileras på och för nästan vilken dator som helst. Ett annat skäl till att källkoden måste finnas tillgänglig är att den är läsbar och begriplig för människor, något som det kompilerade programmet inte är.


next up previous contents
Nästa: 14.2 Variabler Upp: 14. De första programmen Förra: 14. De första programmen
Goran Andersson
1999-03-08