Ladda ner presentationen
Presentation laddar. Vänta.
Publicerades avKurt Jonasson
1
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0
2
Datastrukturer och algoritmer VT 2003 2 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 2 Innehåll Att programmera stora C-program Att skriva C-program oText-editor oKompilering oLänkning oMake ADT i C
3
Datastrukturer och algoritmer VT 2003 3 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 3 C-Progammering Utvecklingsmiljöer Visual-studio, Borland-C,… oProjekt Texteditorer, kompilering,… Skrivkoden i emacs, vi, pico,Word,… Kompilera och länka med gcc, cc eller annan kompilator Automatisera med make-kommandot
4
Datastrukturer och algoritmer VT 2003 4 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 4 Ett c-program 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() { }
5
Datastrukturer och algoritmer VT 2003 5 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 5 Ett c-program Veta vilken ordning funktioner skall vara, kan vara ett problem! 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);
6
Datastrukturer och algoritmer VT 2003 6 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 6 C ett litet språk 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”); ”Dessa är i princip bara att anropa” Men hur vet kompilatorn gränsytan till strlen? Prototyp extern int strlen(*char); length = strlen(string);
7
Datastrukturer och algoritmer VT 2003 7 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 7 Mer om kodbibliotek Det finns färdiga protyper för standardbiblitoeket som man kan använda #include Mattefunktioner lite speciellt math.a är ett bibliotek med mattematiska fuktioner, men det länkas inte i automatisk, utan man måste tala om att math.a skall länkas med. Mer om detta snart Innehåller prototyper datadeklarationer och konstanter
8
Datastrukturer och algoritmer VT 2003 8 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 8 Kompilering cc test.c => a.out som är körbar cc test.c -o kalle => kalle som är körbar cc test.c -o kalle -lm => länkar med math.a cc -c test.c => test.o som är en objektkodsfil, ej körbar
9
Datastrukturer och algoritmer VT 2003 9 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 9 Att dela på ett program cc -o del1.c del2.c del3.c del4.c arvid => arvid som är körbar cc -c del1.c cc -c del2.c cc -c del3.c cc -c del4.c Slå/länka ihop alla objektfilerna till en körbar fil cc -o del1.o del2.o del3.o del4.o arvid => arvid som är körbar del1.c innehåller main () del2.c del3.c del4.c
10
Datastrukturer och algoritmer VT 2003 10 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 10 Vad tjänar vi på detta? 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 del2.c så behöver vi bara: cc -c del2.c cc -o del1.o del2.o del3.o del4.o arvid Ett problem är att kompilatorn inte kommer ihåg identifierare och typer mellan delarna! cc -o del1.c del2.c del3.c del4.c arvid del1.c innehåller main () del2.c del3.c del4.c
11
Datastrukturer och algoritmer VT 2003 11 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 11 Mer om separatkompilering Två sätt 1.Alla delar gör samma typ- och prototypdeklarationer, åtminstone av de delar de ska använda 2.Använd.h-filer (header filer), med typer, konstanter, prototyper En för varje del En gemensam för en helhet test.h //del1.c #include ”test.h” //del2.c #include ”test.h” //del3.c #include ”test.h” //del4.c #include ”test.h”
12
Datastrukturer och algoritmer VT 2003 12 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 12 ADT i C-program Några idéer med abstrakta datatyper Modularisering ”Information hiding” Abstraktion Återanvändning
13
Datastrukturer och algoritmer VT 2003 13 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 13 C ger inte något bra stöd åt ADT, men vi gör så gott vi kan Datatyp = Operationer + Data Datatyp = Gränssnitt + Implementation ADT i C-program stack.hstack.c stack.o
14
Datastrukturer och algoritmer VT 2003 14 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 14 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() ADT i C-program stack.hstack.c stack.o länkning
15
Datastrukturer och algoritmer VT 2003 15 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 15 Egna bibliotek Bunta ihop alla dina datatyper till ett bibliotek typ math.a ar rv ADT.a *.o ranlib ADT.a st.o bibliotek qu.oli.o
16
Datastrukturer och algoritmer VT 2003 16 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 16 ”Automatisk kompilering” 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 i länkningsfasen
17
Datastrukturer och algoritmer VT 2003 17 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 17 Makefile… Targets är en viktig del i en ”Makefile” test: main.o del1.o del2.o del3.o del4.o #vilka filer den ska kolla cc main.o del1.o del2.o del3.o del4.o -lm -o test main.o: main.c test.h #vilka filer den ska kolla cc -c main.c del1.o: del1.c test.h #vilka filer den ska kolla cc - c del1.c del2.o: del2.c test.h #vilka filer den ska kolla cc - c del2.c del3.o: del3.c #vilka filer den ska kolla cc - c del3.c del4.o: del5.c test.h #vilka filer den ska kolla cc - c del4.c
18
Datastrukturer och algoritmer VT 2003 18 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 18 Makefile… Variabler i makefiler CFLAGS = -g -lm OBJS = main.o del1.o del2.o del3.o del4.o test: $(OBJS) Cc $(OBJS) $(CFLAGS) -o $@ $@ Referear till namnet på aktuellt target
19
Datastrukturer och algoritmer VT 2003 19 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 19 Mera om make make -t kompilerar om allt ”dvs touch på alla filer först” make -n rapporterar allt som utförs make -d talar om varför saker händer
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.