Datastrukturer och algoritmer Gruppvning 0 Anders Broberg Ulrika
Datastrukturer och algoritmer Gruppövning 0 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Innehåll u Att programmera stora C-program ØAtt skriva C-program o Text-editor o Kompilering o Länkning o Make ØADT i C Datastrukturer och algoritmer VT 2003 2 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 2
C-Progammering u Utvecklingsmiljöer ØVisual-studio, Borland-C, … o Projekt u Texteditorer, kompilering, … ØSkrivkoden i emacs, vi, pico, Word, … ØKompilera och länka med gcc, cc eller annan kompilator ØAutomatisera med make-kommandot Datastrukturer och algoritmer VT 2003 3 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 3
Ett c-program u u u Alla identifierare som ett program skall använda måste vara deklarerade före användningen. Ø Variabler, ”konstanter”, funktioner* Varför? För att komplilatorn skall kunna kontrollera: Ø Typerna Ø Räckvidden Funktioner ett litet undantag Ø Funktioner som anropas antas att de returnerar int, om man inte sagt något annat #includes #defines //prototyper //globals //Declaration of functions main() { } Datastrukturer och algoritmer VT 2003 4 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 4
Ett c-program u Veta vilken ordning funktioner skall vara, kan vara ett problem! u Ett sätt att komma runt detta är att använda funktionsprototyper, som i princip bara talar om vilken gränsyta en funktion har. void foo(int, int); int *bar(int, *char); Datastrukturer och algoritmer VT 2003 5 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 5
C ett litet språk u u C har en liten kärna, men kan byggas ut… C: s standardbibliotek libc. a innehåller en massa nyttiga funktioner, och länkas alltid in vid kompilering, tex printf(”Hejsan”); u ”Dessa är i princip bara att anropa” length = strlen(string); u Men hur vet kompilatorn gränsytan till strlen? Ø Prototyp extern int strlen(*char); Datastrukturer och algoritmer VT 2003 6 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 6
Mer om kodbibliotek u Det finns färdiga protyper för standardbiblitoeket som man kan använda #include <stdio. h> <time. h> <math. h> Innehåller prototyper datadeklarationer och konstanter u Mattefunktioner lite speciellt Ømath. a är ett bibliotek med mattematiska fuktioner, men det länkas inte i automatisk, utan måste tala om att math. a skall länkas med. Mer om detta snart Datastrukturer och algoritmer VT 2003 7 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 7
Kompilering u cc test. c => a. out som är körbar u cc test. c -o kalle => kalle som är körbar u cc test. c -o kalle -lm => länkar med math. a u cc -c test. c => test. o som är en objektkodsfil, ej körbar Datastrukturer och algoritmer VT 2003 8 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 8
Att dela på ett program u u u cc -o del 1. c del 2. c del 3. c del 4. c arvid => arvid som är körbar cc -c del 1. c cc -c del 2. c cc -c del 3. c cc -c del 4. c Slå/länka ihop alla objektfilerna till en körbar fil Ø cc -o del 1. o del 2. o del 3. o del 4. o arvid => arvid som är körbar del 1. c innehåller main () del 2. c del 3. c del 4. c Datastrukturer och algoritmer VT 2003 9 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 9
Vad tjänar vi på detta? u u u Om vi vill ändra i programmet så måste man kompilera om det Ø Första stegen i kompileringen är långsam Ø Sista steget, länkning är relativt snabbt Om vi vill ändra i koden som är i del 2. c så behöver vi bara: Ø cc -c del 2. c Ø cc -o del 1. o del 2. o del 3. o del 4. o arvid Ett problem är att kompilatorn inte kommer ihåg identifierare och typer mellan delarna! cc -o del 1. c del 2. c del 3. c del 4. c arvid del 1. c innehåller main () del 2. c del 3. c del 4. c Datastrukturer och algoritmer VT 2003 10 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 10
Mer om separatkompilering u Två sätt 1. Alla delar gör samma typoch prototypdeklarationer, åtminstone av de delar de ska använda 2. Använd. h-filer (header filer), med typer, konstanter, prototyper 1. En för varje del 2. En gemensam för en helhet test. h //del 1. c #include ”test. h” //del 2. c #include ”test. h” //del 3. c #include ”test. h” //del 4. c #include ”test. h” Datastrukturer och algoritmer VT 2003 11 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 11
ADT i C-program u. Några idéer med abstrakta datatyper ØModularisering Ø”Information hiding” ØAbstraktion ØÅteranvändning Datastrukturer och algoritmer VT 2003 12 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 12
ADT i C-program u. C ger inte något bra stöd åt ADT, men vi gör så gott vi kan u Datatyp = stack. h stack. c Operationer + Data u Datatyp = stack. o Gränssnitt + Implementation Datastrukturer och algoritmer VT 2003 13 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 13
ADT i C-program u u stack. h protoyper, … stack. c implementation men ingen main() Gör detta för att datatyper du har Länka in dina. o filer där du behöver dom Ø Typ stacktest. c som innehåller main() stack. h stack. c stack. o länkning Datastrukturer och algoritmer VT 2003 14 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 14
Egna bibliotek u Bunta ihop alla dina datatyper till ett bibliotek typ math. a u ar rv ADT. a *. o u ranlib ADT. a st. o qu. o li. o bibliotek Datastrukturer och algoritmer VT 2003 15 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 15
”Automatisk kompilering” u make kommandot… ØAnvänds för att genomföra ”hela” kompileringen i ett steg - mest för att förenkla och för att undvika misstag ØMake använder filen Makefile ØMakefile beskriver komplieringsprocessen ØBara de filer som är förändrade kompileras, för att användas Datastrukturer och algoritmer i länkningsfasen VT 2003 16 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 16
Makefile… u Targets är en viktig del i en ”Makefile” test: main. o del 1. o del 2. o del 3. o del 4. o #vilka filer den ska kolla cc main. o del 1. o del 2. o del 3. o del 4. o -lm -o test main. o: main. c test. h #vilka filer den ska kolla cc -c main. c del 1. o: del 1. c test. h #vilka filer den ska kolla cc - c del 1. c del 2. o: del 2. c test. h #vilka filer den ska kolla cc - c del 2. c del 3. o: del 3. c #vilka filer den ska kolla cc - c del 3. c del 4. o: del 5. c test. h #vilka filer den ska kolla cc - c del 4. c Datastrukturer och algoritmer VT 2003 17 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 17
Makefile… u Variabler i makefiler CFLAGS = -g -lm OBJS = main. o del 1. o del 2. o del 3. o del 4. o test: $(OBJS) Cc $(OBJS) $(CFLAGS) -o $@ u $@ Referear till namnet på aktuellt target Datastrukturer och algoritmer VT 2003 18 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 18
Mera om make u make -t kompilerar om allt ”dvs touch på alla filer först” u make -n rapporterar allt som utförs u make -d talar om varför saker händer Datastrukturer och algoritmer VT 2003 19 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 19
- Slides: 19