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.