C-kompilering

Fra TermvaktWiki
Gå til: navigasjon, søk

Dette er en side om programmeringsspråkene C og C++. Hvis du ser etter rommet C, se Romnavn.

Innhold

C og C++

Siden dette er veldig enkel veiledning i kompilering så tar jeg for meg både C og C++ under ett. Vi bruker gcc som kompilator for C. For å kompilere C++, må man benytte programmet g++, som brukes på samme måte som gcc.

Litt teori

C og C++ er, i motsetning til Java, språk som blir kompilert ned til maskinkode. Det vil si nuller og ett-tall (10010001001). Gcc kompilatoren leser inn Hello.c og oversetter denne til et språk som maskinen skjønner. Man må altså kompilere programmet for hvor gang det skal kjøres på et annet operativsystem eller en annen prosessorarkitektur. Bildet under viser ganske godt hvordan dette fungerer.

Obj1.gif

C-kompilering i praksis

Gcc har veldig mange opsjoner man kan ha med. Disse er for optimalisering og hjelp til debugging pluss enda mer enn hva jeg har oversikt over. Hvis man ønsker å lære mer om hvordan disse opsjonene fungere, så er det bare å lese i manualen til gcc. Skriv "man gcc" xterm for å få den opp. Vi skal nå kompilere det berømte Hello World-programmet:

int main(void) {
  printf("Hello World!\n");
  exit(0);
}


Gcc1.png

Siden vi ikke hadde med noen opsjoner da vi kompilerte, har den eksekverbare filen fått navnet a.out. Det er dette navnet som er standard output fra gcc. Hvis vi nå prøver å kjøre filen a.out, vil det komme ut "Hello World!" på skjermen. Vi skal nå prøve å ha med noen ekstra opsjoner. Vi skal ha med -o og -Wall. -o forteller kompilatoren hvilket navn vi ønsker at den eksekverbare filen skal hete. I dette tilfellet vil filen hete "out" -Wall sier til kompilatoren at alle advarsler skal være med.

Gcc2.png

På bildet over ser vi at kompilatoren ikke liker at vi ikke har deklarert funksjonene exit(0). Den sier også ifra på hvilken linje feilen befant seg.

C-kjøring

Vi skal nå prøve å kjøre programmet vi akkurat har kompilert. Siden vi i siste eksempel bestemte at binærfilen skulle hete out, er det den filen vi skal kjøre. Dette gjør vi ganske enkelt ved å skrive "out" i xterm. Hvis alt har gått bra vil tekststrengen «Hello World!» dukke opp.

Kompilere flere c-filer til en kjørbar fil

Når man lager programmer over en viss størrelse blir det vanlig å dele kildekoden opp i flere filer. Det er da vanlig å ha en header fil (.h) som tar vare på globale variable samt globale funksjons-prototyper, og c filer som inneholder funksjons-implementasjon og annen c-kode. Man må da refere til den header filen som er ønskelig å bruke i en c fil, dersom man ønsker å bruke funksjoner som står definert i .h filen.


Gitt at man har en c fil 'main.c':

#include "helloworld.h"
int
main(void) {
   hello ("caller from main.c!");
   return 0;
}


Og en annen c fil 'hello.c':

#include <stdio.h>
#include "helloworld.h"
void 
hello (const char * name)
{
  printf ("Hello, %s!\n", name);
}


Så har man også kanskje en header fil 'helloworld.h':

void hello (const char * name);


Hvis man vil kompilere alt dette til en kjørbar fil, bruker man gcc på dette vis:

$ gcc main.c hello.c -o helloMultipleCFiles



Oppsummering

Du har nå fått en kort introduksjon i kompilering for C. Hvis du ønsker å lære mer om kompilatorer og hvordan disse fungerer, er kursene INF3110 - Programmeringsspråk og INF5110 - Kompilatorteknikk fine. Har du lyst til å faktisk lære å skrive C, burde du ta fagene INF1060 - Introduksjon til operativsystemer og datakommunikasjon, INF3190 - Datakommunikasjon, INF3151 - Operativsystemer og INF5063 - Programmering av heterogene flerkjerneprosessorer. Ellers finnes det veldig mye informasjon om dette på internett. Se linkene under.

Eksterne lenker

Personlige verktøy
Navnerom
Varianter
Handlinger
Navigasjon
Kategorier
Programvare
Andre
Translate
Verktøy