På DSVs datorer under Linux tänks inlämningsuppgifter och egna övningar i första hand lösas med GNU C-kompilatorn gcc
Egna persondatorer får gärna användas. Om man har Linux på sin persondator så brukar gcc-kompilatorn ingå i installationen. För persondatorer under MS Windows finns olika versioner av GNU C fritt tillgängliga på webben, se kompilatorsidan. Om man har tillgång till en annan kompilator så får den gärna användas under förutsättning att den är ANSI-C-kompatibel. Vid användning av C++-kompilatorer som t.ex. MS Visual C++ skall man se till att endast använda ANSI-C-konstruktioner.
Observera dock att källkodsfilerna vid inlämning skall överföras till institutionens datorer och de skall vara kompilerbara här. Observera vidare att ingen handledning kommer att ges i plattformspecifika frågor! Inlämningsuppgifter ska vara lösta i ANSI-C enligt 1989 års standard.
GNU C-systemet består av kompilatorn gcc (som även är en C++kompilator), debuggern gdb, rutin- resp. klassbibliotek med tillhörande header-filer, dokumentation samt GNUs versioner av hjälpprogram för programutveckling (såsom programmet make). Dokumentation om dessa programvaror finns tillgänglig lokalt på DSVs sajt (se kursens webbsidor). Information om gcc-kommandot kan även fås genom man gcc (bland annat vilka olika flaggor man kan ge till kommandot), och om gdb-kommandot genom man gdb (inom parantes sagt är alla funktioner i C:s standardbibliotek utförligt dokumenterade med man-sidor i Unix-system, t.ex. ger kommandot man printf omfattande dokumentation om printf-funktionen).På kursens länksida finns dessutom länkar till webbaserade referenser för C:s standardbibliotek.
Orientering om användning av vissa av dessa verktyg kommer att ges i föreläsningsform på de s.k. verktygspresentationerna, se Preliminär föreläsningsdisposition för teman för dessa presentationer.
Inmatning och editering av källkod görs med någon texteditor, i vår miljö företrädesvis Emacs. Källkoden till ett C-program skall ligga på en fil med ett namn som avslutas med .c
. Kompilering av ett sådant program görs från ett terminalfönster med kommandot gcc (eller cc som på Linux-system blir ekvivalent med gcc) enligt följande exempel (antag att källkodsfilen heter prog.c):
gcc prog.c
Om kompileringen lyckats har kompilatorn framställt ett exekverbart program med namnet a.out
Kompileringskommandot kan styras med flaggor. De för oss i början viktigaste flagorna är följande:
-o filnamn
det exekverbara programmet får namnet filnamn-g
det exekverbara programmet skall kunna debuggas-Wall
varningar ges för potentiellt farliga konstruktioner-c
separat kompilering (utan länkning)Vi rekommenderar användning av flaggor enligt följande exempel:
gcc -g -Wall -o prog prog.c
Kompilering kan även göras med kommandot make
:
make prog
Detta genererar kommandot
cc prog.c –o prog
Senare på kursen skall vi se hur make-kommandot kan styras för att ge önskade flaggor mm.
Vid kompilering och länkning av program bestående av separatkompilerade moduler bör modulerna kompileras först (var för sig), därefter länkas samman till ett exekverbart program.
Exempel: säg att programmet består av källkoderna modul1.c, modul2.c och main.c. Separatkompilering görs med de tre kommandona:
gcc -c -g -Wall modul1.c gcc -c -g -Wall modul2.c gcc -c -g -Wall main.c
-c
-flaggan i kommandona ovan anger att det är fråga om endast kompilering. Vid lyckad kompilering framställer varje kommando motsvarande objektfil modul1.o, modul2.o resp. main.o. Namngivning av output-filen är automatisk (källkodsfilens namn och filtypen .o
).
Därefter länkas de tre objektfilerna samman med kommandot
gcc -g -o prog modul1.o modul2.o main.o
Detta kommando länkar ihop objektfilerna till ett fullständigt exekverbart program och ger programmet namnet prog
(flaggan -o prog
, utan denna flagga får det exekverbara programmet namnet a.out
).
Man kan kompilera och länka flera källkoder i ett steg:
gcc -g -o prog modul1.c modul2.c main.c
.c
eller .o
) om filen är tänkt att innehålla källkod som måste kompileras först eller objektkod som endast ska länkas.