C/Vi begynner

Fra Wikibøker – frie læremidler
< C

Hva du trenger[rediger]

Før du kan starte å programmere i C må du ha en kompilator, og eventuelt en teksteditor. Kompilatoren er det programmet som tar en tekstfil med C-kildekode og gjør den om til et kjørbart program som datamaskinen forstår.

For Windows-brukere anbefales brukervennlige code::blocks, som er både kompilator og teksteditor i en og samme pakke.

Bruker du Linux har du som regel allerede en C-kompilator inne, nemlig GCC. Fyr opp konsollen og skriv inn "gcc" for å sjekke dette. Det du trenger i tillegg er en teksteditor med syntaks-farging (farging av forskjellige ord i kildekoden, så den blir lettere å lese). Her har du mye å velge i, og de fleste teksteditorer som Emacs, gedit, kate, osv. har dette.

Mac-brukere kan laste ned Xcode fra Apples nettsider, som er en ypperlig teksteditor og kompilator for bl.a. C. Også Mac-brukere vil ha GCC installert fra før.

Eksempel: Hello World[rediger]

Det første vi skal ta for oss, er det klassiske eksempelet "Hello, world!", eller "Hallo verden" på norsk. Det forventes ikke at du skal forstå noe av hvordan programmet fungerer -- vi skal gå gjennom det etter hvert.

#include <stdio.h>

int main()
{
	printf("Hallo, verden!\n");
	return 0;
}

Skriv dette inn i teksteditoren, lagre, og kompiler programmet. C-kildefiler skal alltid lagres med filendingen .c!


Kompilering[rediger]

Nå er kildekoden, altså selve "oppskriften" på programmet skrevet. Det neste steget er å gjøre denne om til et program som datamaskinen kan forstå og kjøre. Denne prosessen kalles å kompilere programmet.

I Code::Blocks i Windows trenger du bare gå på Execute -> Compile (eller trykke F9). Dette vil lage en ny .EXE-fil med samme navn som kildefilen. For å kjøre programmet, åpner du CMD, navigerer til stedet er du lagret kildefila (og der programmet ble lagret), og kjører programmet.

I Linux åpner du konsollen og navigerer deg til stedet der du lagret kildekoden, og skriver:

gcc kildekode.c -o navn

GCC vil nå lage en ny fil som heter navn. Du kan kjøre denne som et vanlig program:

./navn

I Mac kan du bruke Xcodes egne kompilator, men det anbefales at du eventuelt bruker Xcode som editor, og lagrer koden som en .C-fil, og kompilerer med GCC akkurat på samme måte som i Linux.

Dersom du kjører programmet i Windows, og ikke rett fra kommandolinja, vil du oppdage at vinduet lukkes. Dette er egentlig helt riktig; programmet er jo ferdig å kjøre. Men det kan være irriterende å måtte kjøre det fra kommandolinja, så i Windows kan du legge til følgende systemkommando som skal kjøres:

system("pause");

Denne linja legger du til før return 0;.

I UNIX-lignende system kan du få en tilnærmet effekt ved å legge til denne linjen før return 0;:

getchar();

Det denne linjen gjør er enkelt forklart å vente til du har sendt et tegn til terminalen, etterfulgt av linjeskift (enter).

Gjennomgang av "Hello World"[rediger]

Så, hva betyr denne koden da? En gjennomgang:

#include <stdio.h>

Her sier vi til kompilatoren at vi vil inkludere filen stdio.h i koden vår. stdio.h inneholder funksjonsdeklarasjoner for fundamentale funksjoner som printf (les om den nedenfor). En funksjon kalles også en "rutine" eller "prosedyre" og er kort sagt en navngitt blokk med kode som kan sendes verdier til og kjøres. Dette er en veldig enkel (og teknisk ukorrekt) beskrivelse. Vi kommer tilbake til funksjoner i funksjonskapittelet. Siden vi bruker printf-funksjonen, må vi inkludere stdio.h. Ellers vil ikke kompilatoren kjenne igjen ordet printf som et gyldig navn. Merk at # foran include sier at det er et kompilatordirektiv, altså noe som har med hvordan kompilatoren skal håndtere koden.

int main()

Her definerer vi en funksjon ved navn main. Vi skal ikke ta noe om funksjoner i detalj nå, men la oss si det slik at main er den funksjonen programmet alltid starter i, og må være med i programmet.

De to klammene, { og }, definerer en programblokk. Alt mellom { og } regnes som del av main-funksjonen.

printf("Hallo, verden!\n");
return 0;

Disse to linjene kalles uttrykk, og er det vi bruker mest i C. I andre språk kaller man dem gjerne for kommandolinjer, setninger, eller lignende. I C skal alle uttrykk skilles fra hverandre ved hjelp av semikolon. Husk derfor alltid å skrive ; etter hvert uttrykk. Senere vil vi se at definisjonen av "uttrykk" ikke alltid er like rett frem, så det kommer steder hvor man ikke skal bruke ; men det ser du når den tid kommer.

La oss se på printf først. Som sagt over er printf, i likhet med main, en funksjon. Denne funksjonen har vi ikke laget selv, men den er deklarert i stdio.h, som vi inkluderte i starten av programmet. I korte trekk, tar printf en streng (serie med bokstaver), i vår kode "Hallo, verden!\n", og viser den på skjermen. Men du la kanskje merke til "\n" på slutten av strengen? "\n" betyr "new line" og gjør at markøren på skjermen flyttes et ned til neste linje. Dette er nødvendig for at kommandolinja ikke skal komme rett etter "Hallo verden", men på linja nedenfor.

Det siste uttrykket, return 0, gjør at programmet avsluttes. Det avslutter main-funksjonen, og returnerer verdien 0 til operativsystemet. Verdien 0 forteller operativsystemet at programmet avsluttet uten feil.

Dette var bare en gjennomgang av "Hello world"-programmet. For de fleste nybegynnere innen språket, vil det fortsatt være vanskelig å forstå det. Nå skal vi ta ting for oss på en roligere og mer systematisk måte.

Grunnleggende syntaks[rediger]

C har en kraftfull syntaks (språkregler), som dessverre kan være litt vanskelig å sette seg inn i for nybegynnere. Man må ofte skrive en del tegn som man ikke trenger å skrive i andre språk. Dette gjør på en måte programmeringen vanskelig, spesielt for nybegynnere, men det lønner seg fordi koden som oftest blir lettere å lese og følge.

Det meste av koden man skriver, er uttrykk, altså det programmet skal utføre. Alle uttrykk må alltid slutte med semikolon for å markere slutten av det. I noen språk, er det nok å avslutte et uttrykk med linjeskift, men i C gjelder ikke dette -- det er kun semikolon som separerer uttrykkene. Det vil si at følgende måte å skrive uttrykkene i "Hello world!"-programmet over er lovlig:

printf
("Hallo verden!\n"); return 0;

Selvsagt blir dette uryddig og ulogisk kode, da printf blir delt opp over to linjer, og return-uttrykket kommer på samme linje som printf. Det er kun for å vise hvorfor semikolon er viktig å huske på; uten semikolon vet ikke kompilatoren hvor uttrykket slutter.

En annen viktig del av syntaksen, er bruken av klammene { og } for å markere en programblokk. En programblokk er en rekke uttrykk samlet. Dette er nødvendig i tilfeller der det er instruksjoner som krever flere uttrykk som argument. I slike tilfeller, må uttrykkene samles i en programblokk.

Et annet tilfelle der man behøver programblokker, er funksjonskroppen til funksjoner. Dette ser du i main i "Hallo, verden!"-eksempelet over. Det er i funksjonskroppen vi skriver uttrykkene en funksjon skal utføre. Men i funksjonskroppen, er det påkrevd at vi har med klammene -- selv om vi bare har ett uttrykk. Dette er altså funksjonskroppen til main-funksjonen i "Hallo, verden!"-eksempelet over:

{
	printf("Hallo, verden!\n"); 
	return 0;
}


Legg merke til at det er normalt å indentere (tabbe) koden i en programblokk ett hakk inn i forhold til klammene. Dette gjør koden mer luftig og ryddig å lese og forstå fordi man da får en tydelig markering av koden blokken.


Kommentarer[rediger]

Å kommentere koden du skriver er lurt. Det gjør det lettere for andre, og deg selv, å forstå programmet, f.eks. hvis du senere skal fortsette på programmet og gjerne har glemt hvordan det fungerer. I C skriver man kommentarer slik:

/* Dette er en kommentar */

Kommentarer kan også gå over flere linjer:

/* Dette er en kommentarlinje.
Og dette er en annen. */

Enkelte kompilatorer som GCC støtter såkalte "single line"-kommentarer. Disse skriver vi med følgende syntaks:

printf("Hei.\n");  // Vi skriver "Hei" på skjermen.