Programmeringsspråket C

Absoluta grunderna

C - lite information

C utvecklades ur ett behov av ett standardiserat språk för att man inte skulle behöva skriva om Unix-kärnan varje gångden skulle portas till en nyare dator. C blev mycket populärt, och det naturligtvis inte utan anledning. C är ett mångsidigt och enkelt språk som går fort att lära sig och trots det är extremt kraftfullt och går att använda till nästan allt som ska programmeras. Kompilatorer för C finns till väldigt många plattformar, och C är väl standardiserat och därför fungerar många program utan, eller endast med smärre, modifikationer på andra plattformar. Programmen som skrivs i C blir ofta små och snabba.

Man kan undra varför just C, och inte något liknande språk? Språkval är egentligen helt upp till programmeraren, men det är vår åsikt att många andra språk har fler element att hålla reda på, och därför tar längre tid att lära sig. C är ganska "rent" och ger en bra grund, speciellt i programmeringstänket, som är viktigt att ha oavsett vilket språk man programmerar i.

Val av utvecklingsmiljö

På rubriken låter det jättetråkigt, men man måste ha något att skriva koden i, samt något som kan göra koden till en körbar programfil. Det senare kallas en kompilator.

För att skriva koden behövs egentligen bara en textredigerare av valfri modell, enda kravet är att den kan spara det som skrivs som ren text. Personliga favoriter är gedit, Leafpad och Vim i Linux, Notepad++ och PSPad i Windows, och TextWrangler i OS X.

En kompilator har till uppgift att göra din kod, som är ren text, till något som datorn faktiskt kan förstå. De vi använder är gcc i Linux och OS X, och MinGW i Windows. Båda är kommandobaserade, och hanteras från valfri terminal/kommandotolk. Instruktioner för installation och användning kan du hitta i Installation och användning av kompilator.

Det finns en uppsjö av miljöer som man kan installera som agerar både textredigerare och har inbyggd kompilator. Dessa kan vara enklare att ta till sig, då man skriver koden i programmet och sen trycker på en knapp för att kompilera och köra. Dock är de oftast svårare att hantera i längden, och man har mindre kontroll över vad som händer. Om man ändå känner för ett IDE, som de kallas, så är Code::Blocks bra, fungerar i både Linux och Windows.

Ett första exempel

Hello World-programmet är ofta det första man lär sig, oavsett vilket programmeringsspråk man studerar. Därför börjar vi här också med att visa hur detta ser ut i C. Vi tror på en "titta/reflektera"-modell, så följer gör programmet som skriver ut "Hello World" på skärmen. Titta gärna hur det ser ut och föreställ dig vad de olika delarna gör innan du läser vidare.

#include <stdio.h>
 
int main() {
    printf("Hello World!\n");
 
    return 0;
}

Det här är alltså ungefär så grundläggande som ett C-program blir. Det skriver ut "Hello World" på skärmen och avslutas sen. Första raden, #include <stdio.h> är en instruktion till kompilatorn som säger åt den att inkludera ett bibliotek som innehåller massvis med funktioner för in- och utmatning. Notera att alla rader som börjar med '#' är instruktioner för kompilatorn, och inte ska avslutas med semikolon.

Sen gäller det att förstå hur körning av C-program sker, i vilken ordning allting utförs. Det första som händer är att programmet går in i funktionen som heter main(), och utför allt som finns inuti den. Uppifrån och ned. Om man vill göra något, så ska det på något sätt anropas ur main(). Detaljerna kring definitionen kommer du lära dig senare, men nöj dig med att det viktiga är int main() { }. Det som ska finnas inuti den funktionen är det som står mellan måsvingarna. (Notera väl här också att man får lägga radbrytningar och mellanslag lite hur man vill i C.)

printf() är en annan funktion, den gör det lilla (men samtidigt stora) jobbet att skriva ut på skärmen det man skickar till den. Den tar emot ett argument, en sträng mellan två citattecken, och skriver ut det på skärmen. Senare kommer du lära dig att den kan ta flera argument, och dessa kan kombineras på ett kraftfullt sätt. Märk väl att raden slutar på semikolon. Alla programinstruktioner slutar på semikolon.

Sedan kommer en rad, return 0, som helt enkelt gör så att funktionen returnerar en nolla till den som anropade den. Eftersom det är main-funktionen så vart den anropad av systemet, och systemet tar nollan som ett tecken på att allt gick bra och programmet avslutades utan fel.

Du kanske undrar över '\n' i strängen som skickades till printf()? Den innebär att programmet gör en radbrytning. Prova gärna själv att skicka till exempel följande till printf(): "Hello\nWorld!\n"

Prova gärna även att lägga till fler anrop till printf(). Följande program är fullt möjligt.

#include <stdio.h>
 
int main() {
    printf("Hello World!\n");
 
    printf("Hmm, bra va? :D\n");
    printf("Tank att man kan gora flera!\n");
 
    return 0;
}

Nu måste bara tas upp det om att radbrytningar och mellanslag och dylikt får sättas lite hur som helst i koden. Detta medför både för- och nackdelar. En klar fördel är att varje programmerare får strukturera programmet som han är bekväm med, och att man kan utveckla kodstilar som gör koden väldigt lättläst. Samtidigt, stor frihet innebär också stort ansvar. Det finns praktexemplar på riktigt ful kod ute i världen. Se till att inte fastna där. Följande program är till exempel fult skriven kod, men som likväl fungerar:

#include <stdio.h>
int main( ){printf(  "Hello World!\n") ;return 0;  }

Försök att inte göra fult kodande till en vana, det kommer bara handikappa senare. Innan du går vidare till nästa del, experimentera gärna med det du har lärt dig hittills.

En annan del av C, som hör ihop med snyggt kodande, är att kommentera sin kod. Att kommentera koden innebär att man lägger till text som inte är en del av programmet. Dessa kommentarer används ofta för att förklara för människor som läser koden vad vissa kodbitar gör. Det är god vana att kommentera, men att inte kommentera för mycket, för då slutar man läsa kommentarerna. Här är vårat första program, med kommentarer.

/*
Ett program som har den enkla
uppgiften att skriva ut ett
litet meddelande på skärmen!
Programmerat av: kqr, 2009-07-01
*/
 
#include <stdio.h>    //bibliotek för standardmässig utskrift och inmatning
 
int main() {
    printf("Hello World!\n");    //skriver ut meddelandet!
 
    /*
    här inuti int main() { } sker allt i vårat program
    det är här körningen både börjar och slutar
    vill man göra något görs det här inne :)
    */

 
    return 0;
}

Om du tycker att denna kod är överkommenterad, alltså har för många kommentarer, har du helt rätt. Men den är endast där för att visa hur det fungerar och få med båda typerna av kommentarer. Den första, som dyker upp precis i början och i mitten av programmet, är flerradskommentaren. Den inleds med /* och avslutas med */. Allt mellan dessa två sekvenser ignoreras av datorn. Den andra kommentaren är vad som kallas enradskommentar, eller "smart kommentar". Den börjar vid sekvensen // och gäller för resten av raden.

Som sagt är denna kodbit överkommenterad, dock vill vi peka ut var man bör ha kommentarer. Kommentarer som den högst upp i detta exemplet, är inte alltför ovanliga. Högst upp i små program kan man ofta se en kort beskrivning av programmet, programmerare och datum. Båda enradskommentarerna är ganska onödiga, då alla som läser koden ofta vet vad stdio.h är samt vad printf() gör. Den sista flerradskommentaren är också ganska onödig, även om kommentarer av den typen kan vara vettig i bland annat exempel, för att förklara för andra vart de ska lägga kod och så. Generellt har man annars små kommentarer vid komplicerade kodbitar, som kan vara svåra att förstå för utomstående programmerare (eller för dig själv några månader senare!).

Variabler →

Copyleft kqr & slaeshjag 2009, 2012 some rights reserved