hello kann nach der Kompilierung wie jedes andere Unix Kommando ausführt werden

Größe: px
Ab Seite anzeigen:

Download "hello kann nach der Kompilierung wie jedes andere Unix Kommando ausführt werden"

Transkript

1

2 HelloWorldRevisited Datei hello.c Kommandozeile $ gcc -o hello hello.c $./hello Hello, World! $ #include <stdio.h> int main(){ } printf("hello, World!\n"); return 0; hellokannnachderkompilierungwiejedesandere Unix Kommandoausführtwerden 2

3 DerC Compiler 3

4 KompilierungalsmehrstufigerProzess Quellcode-Dateien hello.c Bibliotheken Header-Dateien stdio.h Präprozessor /usr/lib/libc.a Compiler Linker Objektdateien Modifizierter Quellcode hello.o ausführbaredatei hello 4

5 HelloWorldbestehendausmehrerenDateien Dateimain.cDateienhello.cundbye.c externhello(char*who); externbye(char*who); intmain(){ #include<stdio.h> hello(char*who){ printf("hello,%s!\n",who); } hello("world"); bye("world"); return0; } #include<stdio.h> bye(char*who){ printf("bye,%s!\n",who); } 5

6 SeparateKompilierung $ ls bye.c hello.c main.c $ gcc -c hello.c $ gcc -c main.c $ gcc -c bye.c $ ls bye.c hello.c main.c bye.o hello.o main.o $ 6

7 Linken $ gcc -o hello main.o hello.o bye.o $./hello Hello, World! Bye, World! $ 7

8 TypenvonFehlern Präprozessor Fehler,z.B falschgeschriebenepräprozessoranweisung undefiniertesymbolischekonstante Compiler Fehler,z.B Syntaxfehler Typfehler Linker Fehler,z.B undefinedreferenceto`foo' collect2:ldreturned1exitstatus Laufzeitfehler,z.B. dividebyzero Speicherzugriffsfehler:segmentationfault/buserror 8

9 DerPräprozessor 9

10 Präprozessoranweisungen am Zeichen # zu Beginn der Anweisung zu erkennen der Präprozessor bearbeitet nur Zeilen beginnend mit # Einfügen von Dateien: Ersetzen von Text (Makros): #include #define Bedingte Kompilierung: #if, #ifdef, #ifndef, #else, #elif, #endif 10

11 ParameterloseMakros Syntax:#definename[replacement] Anwendung:DefinitionvonsymbolischenKonstanten #definepi PräprozessorersetztvorderKompilierungjedes VorkommenvonPImit ErhöhtdieLesbarkeitundWartbarkeitdesProgramms 11

12 MakrosmitParametern Syntax:#definename(dummy1[,dummy2][,...])tokenstring ExpressionMakros übersetztineinenausdruck ähnlicheinerfunktion,dieeinenwertzurückgibt #defineradtodeg(x)((x)* ) StatementMakros übersetztineinodermehrerevollecstatements ähnlicheinerfunktion,dievoidzurückgibt #defineswap(x,y)\ do{tmp=x;x=y;y=tmp;}while(0) 12

13 WarumKlammern? #defineradtodeg(x)(x* ) RADTODEG(a+b) (a+b* ) #defineradtodeg(x)(x)* /RADTODEG(a) 1/(a)*

14 WarumkeinSemikolonamEndeeinesMakros? SemikolonbeimAufrufsiehtnatürlicheraus >ProgrammiererkönntenSemikolonsdoppeltsetzen unddamitdencontrolfloweinesprogrammsändern #defineradtodeg(x)((x)* ); #definedegtorad(x)((x)* ); if(to_degree) y=radtodeg(x); else y=degtorad(x); if(to_degree) y=((x)* );; else y=((x)* );; 14

15 WarumkeinSemikolonamEndeeinesMakros? zusätzlichesproblembeiexpressionmakros #defineradtodeg(x)((x)* ); if(radtodeg(x)>180) if(((x)* );>180) y=radtodeg(x)+180; y=((x)* );+180; 15

16 MehrzeiligeStatementMakros /* *Swapstwovalues. *Requirestmpvariabletobedefined. */ #defineswap(x,y)\ do{\ tmp=x;\ x=y;\ y=tmp;\ }\ while(0) 16

17 AlternativesSWAP /* *Swapstwovalues. *Requirestypepassedasparameter */ #defineswap(x,y,type)\ do{\ typetmp=x;\ x=y;\ y=tmp;\ }\ while(0) 17

18 EleganteLösung(nurgcc) /* *Swapstwovalues. *Requiresgcctypeofextension */ #defineswap(x,y)\ do{\ typeof(x)tmp=x;\ x=y;\ y=tmp;\ }\ while(0) 18

19 Warumdo{...}while(0)? #defineswap(x,y)\ tmp=x;\ x=y;\ y=tmp intx,y,tmp; if(x>y) SWAP(x,y); intx,y,tmp; if(x>y) tmp=x; x=y; y=tmp; 19

20 Warumdo{...}while(0)? #defineswap(x,y){\ tmp=x;\ x=y;\ y=tmp;\ } intx,y,tmp; if(x>y){ tmp=x; x=y; y=tmp; }; else... intx,y,tmp; if(x>y) SWAP(x,y); else... 20

21 Zusammenfassung WenneinDummy ArgumentfüreinenWert(odereinen PointerzueinemWert)steht,alleVorkommenim Tokenstringklammern DengesamtenTokenstringvonExpressionMakros klammern KeineSemikolonsamEndeeinesMakros MehrzeiligeStatementMakrosmit\trennen TokenstringvonmehrzeiligenStatementMakrosmit do{..}while(0)umschließen 21

22 WeitereProbleme dassymbolerscheintbeimtestendesprogramms mittelsdebuggernichtmehr Makroskönnensichungewolltüberschreiben MakroswerdenerstexpandiertunddahervomCompiler überprüft,wennsietatsächlichaufgerufenwerden MehrfacheSeiteneffekte #definemin(a,b)((a)>(b)?(b):(a)) x=y=1; MIN(++x,++y); 22

23 MakroStyleguide NamenskonventionGroßbuchstaben Wennmöglich,FunktionenstattMakrosverwenden Alternativen: ParameterloseMakrosconst(C90) MakrosmitParameterninline(C99) VorsichtbeiMakroszurOptimierung Makroskurzhalten keinehacks! 23

24 BedingteKompilierung 24

25 BedingteKompilierung #ifdef_win32 /*dowindowsspecificstuffhere*/ #endif #ifdef APPLE /*domacspecificstuffhere*/ #endif #ifdef linux /*dolinuxspecificstuffhere*/ #endif 25

26 Beispiel:Debugging #definepi #defineradtodeg(x)((x)* ) intdebug=1; intmain(){... if(debug) printf("pi%f",radtodeg(pi));... return0; } 26

27 Ein einfaches Debugging Makro Datei debug.h #include<stdio.h> #definedebug #ifdefdebug #definelogprintf #else #definelogif(0)printf #endif 27

28 Unser neues Hello World Dateihello.c #include debug.h intmain(){ LOG("HelloWorld!\n"); return0; } 28

29 Output des Präprozessors (gcc) $gcc Ehello.c...748weitereZeilen #11"hello.c" intmain(){ printf("hello,world!\n"); return0; } $ 29

30 define per Kommandozeile (gcc) gcc[ Dmacro[=defn]...]infile %gcc DDEBUGhello.c %gcc DDEBUG DVERBOSE=1hello.c 30

31 Hinzufügen von Debug Levels Dateidebug.h #include<stdio.h> #defineverbose0 #ifdefdebug #definelogprintf #else #definelogif(0)printf #endif 31

32 Unser neues Hello World mit Debug Levels Dateihello.c #include debug.h intmain(){ if(verbose==1)log("helloworld!\n"); return0; } 32

33 Debug Levels mit bedingter Kompilierung Dateihello.c #include debug.h intmain(){ #ifverbose==1 LOG("HelloWorld!\n"); #endif return0; } 33

34 Header-Dateien 34

35 Header Dateien 35

36 Header-Dateien HeaderDateienerkenntmananderEndung".h SiesindTeilvonSchnittstellenzwischenSystemen Sieenthalten: Funktions Deklarationen globalevariablen symbolischekonstanten Makros Datentypen(z.B.Strukturen) 36

37 Inkludieren von Header-Dateien #include <name> sucht zuerst im Verzeichnis der Systemdateien erst dann im Verzeichnis der Quelldatei wird normalerweise verwendet, um Headerdateien, die vom System geliefert werden, einzubinden (z.b. #include <stdio.h>) #include "name" sucht zuerst im Verzeichnis der Quelldatei erst dann im Verzeichnis der Systemdateien wird normalerweise verwendet, um selbst geschriebene Header-Dateien einzubinden (z.b. #include "debug.h") 37

38 I Compileroption(gcc) ErweitertbeimÜbersetzeneinesProgrammesdieListe derverzeichnisseindenennacheinerdateigesuchtwird. gcc Iincludehelloworld.c suchtnachstdio.hzuerstalsinclude/stdio.h,underst dannals/usr/include/stdio.h. 38

39 int _flags2; Präprozessor OutputvonHelloWorld off_t _old_offset; unsigned short _cur_column; #304"/usr/include/stdio.h"34 signed char _vtable_offset; char _shortbuf[1]; externintprintf( constchar* restrict format,...); _IO_lock_t *_lock; # 319 "/usr/include/libio.h" 3 4 off64_t _offset; # 328 "/usr/include/libio.h" 3 4 void * pad1; void * pad2; void * pad3; void * pad4; size_t pad5; int _mode; char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)]; }; typedef struct _IO_FILE _IO_FILE; 39

40 Problem:Mehrfachinklusion Datei foo.h Datei bar.h #include bar.h #include baz.h #include baz.h Datei baz.h... 40

41 Problem:Mehrfachinklusion Datei foo.h Datei bar.h #include bar.h #include baz.h #include baz.h Datei baz.h... 41

42 Problem: Mehrfachinklusion Datei foo.h Datei bar.h #include bar.h #include baz.h #include baz.h Datei baz.h #include bar.h... 42

43 Problem:Mehrfachinklusion Datei foo.h Datei bar.h #include bar.h #include baz.h #include baz.h Datei baz.h #include bar.h... 43

44 VermeidungvonMehrfachinklusion Datei foo.h #ifndef FOO_H #define FOO_H extern int foo(int x, int y); #endif 44

45 Der Präprozessor 45

46 Danke! 46

47 1

48 HelloWorldRevisited Datei hello.c Kommandozeile $ gcc -o hello hello.c $./hello Hello, World! $ #include <stdio.h> int main(){ } printf("hello, World!\n"); return 0; hellokannnachderkompilierungwiejedesandere Unix Kommandoausführtwerden 2

49 DerC Compiler 3

50 KompilierungalsmehrstufigerProzess Quellcode-Dateien hello.c Bibliotheken Header-Dateien stdio.h Präprozessor /usr/lib/libc.a Compiler Linker Objektdateien Modifizierter Quellcode hello.o ausführbaredatei hello 4 Der C-Präprozessor ist zuständig für den ersten Arbeitsgang beim Übersetzen eines Quellprogramms. Er führt vor dem eigentlichen Übersetzen des Programms in Maschinencode eine Art Vorverarbeitung aus. Der eigentliche'' Compiler erzeugt aus dem Quelltext zusammen mit den durch #include-anweisungen dazugekommenen Header-Files den Objektcode. Dabei leistet er die Hauptarbeit des Übersetzens: * Er überprüft die syntaktische und semantische Korrektheit des Programms, * wandelt die Konstrukte der Sprache C in Instruktionen der Maschinensprache des Systems um, * optimiert die entstehende Instruktionsfolge. (Dieser letzte Schritt wird oft wieder von besonderen Programmen, den optimizern, erledigt.) Meistens wird dabei zunächst Assembler Code erzeugt Assemblerdateien haben die Endung.s Daraus macht der Assembler Instruktionen der Maschinensprache des Systems, also Binärcode. Das Ergebnis dieser Stufe ist das Object-File, traditionell mit der File-Endung.o, also zum Beispiel hello.o. hello.o enthält eine Referenz zu der funktion printf. Da wir dieses Symbol nicht definiert haben, ist es eine externe Referenz. Der Maschinencode enthält eine Instruktion, um printf aufzurufen, aber im Objektcode wissen wir noch nicht die tatsächliche Adresse, die notwendig ist, um diese Funktion auszuführen. Der Linker bekommt als Input Objektdateien und Libraries. Libraries sind Kollektionen von Objektdateien. Er löst externe Referenzen auf, und trägt die endgültigen Adressen für Funktionen und Variablen ein. Obwohl man Bibliotheken wie Object-Files verwenden kann, behandelt der Linker sie anders: * Objektdateien werden vollständig mit zum Programm dazugebunden. * Bibliotheken werden vom Linker nur nach den Symbolen durchsucht, die im Moment noch nicht definiert sind. (Symbole heißt in unserem Fall,,globale Funktions- und Variablennamen.'') Nur die Object-Files aus dem Archiv, die solche undefinierten Symbole definieren, werden zum Programm dazugebunden. Wenn alle externen Referenzen vorhanden sind, hat man am Ende eine ausführbare Datei.

51 HelloWorldbestehendausmehrerenDateien Dateimain.cDateienhello.cundbye.c externhello(char*who); externbye(char*who); intmain(){ #include<stdio.h> hello(char*who){ printf("hello,%s!\n",who); } hello("world"); bye("world"); return0; } #include<stdio.h> bye(char*who){ printf("bye,%s!\n",who); } 5 Grosse Programme sollte man schon der Übersichtlichkeit halber in mehrere Source-Files aufteilen, auch weil dann beim Entwicklen der Software nicht nach jeder kleinen Änderung alles neu übersetzt werden muß. Linken geht schnell; das Übersetzen dauert lange.

52 SeparateKompilierung $ ls bye.c hello.c main.c $ gcc -c hello.c $ gcc -c main.c $ gcc -c bye.c $ ls bye.c hello.c main.c bye.o hello.o main.o $ 6 Wenn man nicht (zum Beispiel mit -c) das Gegenteil festlegt, macht ein C-Compiler immer bis zum ausführbaren Programm weiter. Die.o Dateien werden dann nach dem Kompilierungsvorgang gelöscht Wenn wir versuchen, die files einzeln ohne -c zu kompilieren, erhalten wir Linker-Fehler undefined reference to `bye' undefined reference to `hello' bye und hello wurden nirgends definiert. undefined reference to `main' In c muss jedes Programm genau eine main-funktion haben, denn das ist der Punkt, an dem die Ausführung des Programms beginnt.

53 Linken $ gcc -o hello main.o hello.o bye.o $./hello Hello, World! Bye, World! $ 7 Um nur die Linker-Stufe des Compilers gcc oder cc zu benutzen, braucht man keine besonderen Optionen anzugeben. Daß eine Datei Objektcode enthält, sieht der Compiler an der Endung:.o für Objektcode. Die -o-option, die einem in diesem Zusammenhang einfallen könnte, steht für output, nicht für object - das Wort nach ihr sagt, wie das ausführbare Programm heißen soll. Wenn man -o nicht angibt, ist der default a.out; deshalb heißt das File-Format für ausführbare Programme unter Unix auch manchmal,,a.outformat.``

54 TypenvonFehlern Präprozessor Fehler,z.B falschgeschriebenepräprozessoranweisung undefiniertesymbolischekonstante Compiler Fehler,z.B Syntaxfehler Typfehler Linker Fehler,z.B undefinedreferenceto`foo' collect2:ldreturned1exitstatus Laufzeitfehler,z.B. dividebyzero Speicherzugriffsfehler:segmentationfault/buserror 8

55 DerPräprozessor 9 Die Tücken des Präprozessors liegen darin, dass er ein reines Textersetzungsprogramm ist. Das hat zur Folge, dass man mysteriöse Fehlermeldungen bekommt, die sich auf den modifizierten Text beziehen und somit auf Code, den man so nie geschrieben hat.

56 Präprozessoranweisungen am Zeichen # zu Beginn der Anweisung zu erkennen der Präprozessor bearbeitet nur Zeilen beginnend mit # Einfügen von Dateien: Ersetzen von Text (Makros): #include #define Bedingte Kompilierung: #if, #ifdef, #ifndef, #else, #elif, #endif 10

57 ParameterloseMakros Syntax:#definename[replacement] Anwendung:DefinitionvonsymbolischenKonstanten #definepi PräprozessorersetztvorderKompilierungjedes VorkommenvonPImit ErhöhtdieLesbarkeitundWartbarkeitdesProgramms 11

58 MakrosmitParametern Syntax:#definename(dummy1[,dummy2][,...])tokenstring ExpressionMakros übersetztineinenausdruck ähnlicheinerfunktion,dieeinenwertzurückgibt #defineradtodeg(x)((x)* ) StatementMakros übersetztineinodermehrerevollecstatements ähnlicheinerfunktion,dievoidzurückgibt #defineswap(x,y)\ do{tmp=x;x=y;y=tmp;}while(0) 12 Die Parameter in der Bezeichnerliste einer Makrodefinition müssen durch Kommas voneinander getrennt werden und innerhalb dieser Liste jeweils eindeutig sein. Man beachte, dass die Parameterliste nicht durch Leerzeichen vom Namen des Makros getrennt werden darf. Ansonsten wird alles ab der öffnenden Klammer zum Tokenstring gezählt und für den Makronamen substituiert. Der Tokenstring muss dagegen durch ein oder mehrere "weiße" Leerzeichen (whitespaces) von der Parameterliste getrennt sein, sonst sieht der Präprozessor das Makro sie als Makro ohne Parameter Beim Aufruf von RADTODEG(PI) passiert folgendes: Da der Makroaufruf selbst ein Makro enthält, wird dieses zuerst erweitert. Dann ersetzt der Präprozessor jedes Vorkommen von x im Tokenstring mit (nichtPI) DerPräprozessorsubstituiertdanndenentstandenenTokenstringfürdenMakrouafruf. Dieser Ersatz betrifft nur Terminalsymbole (also eigenständige Vorkommen von bezeichner im Quelltext), nicht aber Zeichenfolgen, die in einem Kommentar erscheinen, Teil eines anderen Bezeichners oder Teil einer Stringkonstanten sind. Makros können natürlich auch andere Makros aufrufen. Wenn die Definition eines Makros xyz den Bezeichner xyz im Tokenstring enthält, wird dieser Bezeichner nicht erneut erweitert - auch dann nicht, wenn sich die Zeichenfolge xyz erst durch die Erweiterung eines anderen Makros ergibt. Rekursive Makros sind also nicht möglich.

59 WarumKlammern? #defineradtodeg(x)(x* ) RADTODEG(a+b) (a+b* ) #defineradtodeg(x)(x)* /RADTODEG(a) 1/(a)*

60 WarumkeinSemikolonamEndeeinesMakros? SemikolonbeimAufrufsiehtnatürlicheraus >ProgrammiererkönntenSemikolonsdoppeltsetzen unddamitdencontrolfloweinesprogrammsändern #defineradtodeg(x)((x)* ); #definedegtorad(x)((x)* ); if(to_degree) y=radtodeg(x); else y=degtorad(x); if(to_degree) y=((x)* );; else y=((x)* );; 14

61 WarumkeinSemikolonamEndeeinesMakros? zusätzlichesproblembeiexpressionmakros #defineradtodeg(x)((x)* ); if(radtodeg(x)>180) if(((x)* );>180) y=radtodeg(x)+180; y=((x)* );+180; 15

62 MehrzeiligeStatementMakros /* *Swapstwovalues. *Requirestmpvariabletobedefined. */ #defineswap(x,y)\ do{\ tmp=x;\ x=y;\ y=tmp;\ }\ while(0) \ unterdrückt den Zeilenumbruch, sonst Compilerfehler 16

63 AlternativesSWAP /* *Swapstwovalues. *Requirestypepassedasparameter */ #defineswap(x,y,type)\ do{\ typetmp=x;\ x=y;\ y=tmp;\ }\ while(0) 17

64 EleganteLösung(nurgcc) /* *Swapstwovalues. *Requiresgcctypeofextension */ #defineswap(x,y)\ do{\ typeof(x)tmp=x;\ x=y;\ y=tmp;\ }\ while(0) 18

65 Warumdo{...}while(0)? #defineswap(x,y)\ tmp=x;\ x=y;\ y=tmp intx,y,tmp; if(x>y) SWAP(x,y); intx,y,tmp; if(x>y) tmp=x; x=y; y=tmp; 19

66 Warumdo{...}while(0)? #defineswap(x,y){\ tmp=x;\ x=y;\ y=tmp;\ } intx,y,tmp; if(x>y){ tmp=x; x=y; y=tmp; }; else... intx,y,tmp; if(x>y) SWAP(x,y); else DerCompilererkenntinderRegel,dassdieSchleifenureinmaldurchlaufenwirdundgeneriertkeinenCode fürsie.

67 Zusammenfassung WenneinDummy ArgumentfüreinenWert(odereinen PointerzueinemWert)steht,alleVorkommenim Tokenstringklammern DengesamtenTokenstringvonExpressionMakros klammern KeineSemikolonsamEndeeinesMakros MehrzeiligeStatementMakrosmit\trennen TokenstringvonmehrzeiligenStatementMakrosmit do{..}while(0)umschließen 21

68 WeitereProbleme dassymbolerscheintbeimtestendesprogramms mittelsdebuggernichtmehr Makroskönnensichungewolltüberschreiben MakroswerdenerstexpandiertunddahervomCompiler überprüft,wennsietatsächlichaufgerufenwerden MehrfacheSeiteneffekte #definemin(a,b)((a)>(b)?(b):(a)) x=y=1; MIN(++x,++y); 22

69 MakroStyleguide NamenskonventionGroßbuchstaben Wennmöglich,FunktionenstattMakrosverwenden Alternativen: ParameterloseMakrosconst(C90) MakrosmitParameterninline(C99) VorsichtbeiMakroszurOptimierung Makroskurzhalten keinehacks! 23

70 BedingteKompilierung 24

71 BedingteKompilierung #ifdef_win32 /*dowindowsspecificstuffhere*/ #endif #ifdef APPLE /*domacspecificstuffhere*/ #endif #ifdef linux /*dolinuxspecificstuffhere*/ #endif 25

72 Beispiel:Debugging #definepi #defineradtodeg(x)((x)* ) intdebug=1; intmain(){... if(debug) printf("pi%f",radtodeg(pi));... return0; } 26

73 Ein einfaches Debugging Makro Datei debug.h #include<stdio.h> #definedebug #ifdefdebug #definelogprintf #else #definelogif(0)printf #endif 27

74 Unser neues Hello World Dateihello.c #include debug.h intmain(){ LOG("HelloWorld!\n"); return0; } 28

75 Output des Präprozessors (gcc) $gcc Ehello.c...748weitereZeilen #11"hello.c" intmain(){ printf("hello,world!\n"); return0; } $ 29

76 define per Kommandozeile (gcc) gcc[ Dmacro[=defn]...]infile %gcc DDEBUGhello.c %gcc DDEBUG DVERBOSE=1hello.c 30 Es ist bequem, dieses,,debug`` von der Aufrufzeile des Compilers aus ein- (Testing) und auszuschalten (Release-Build), ohne daß man jedesmal die Quelldatei selbst editieren muß. (Übersetzen muß man sie trotzdem neu; ohne, daß der Präprozessor läuft, können Präprozessor-#defines nicht wirken.)

77 Hinzufügen von Debug Levels Dateidebug.h #include<stdio.h> #defineverbose0 #ifdefdebug #definelogprintf #else #definelogif(0)printf #endif 31

78 Unser neues Hello World mit Debug Levels Dateihello.c #include debug.h intmain(){ if(verbose==1)log("helloworld!\n"); return0; } 32

79 Debug Levels mit bedingter Kompilierung Dateihello.c #include debug.h intmain(){ #ifverbose==1 LOG("HelloWorld!\n"); #endif return0; } 33

80 Header-Dateien 34

81 Header Dateien 35

82 Header-Dateien HeaderDateienerkenntmananderEndung".h SiesindTeilvonSchnittstellenzwischenSystemen Sieenthalten: Funktions Deklarationen globalevariablen symbolischekonstanten Makros Datentypen(z.B.Strukturen) 36

83 Inkludieren von Header-Dateien #include <name> sucht zuerst im Verzeichnis der Systemdateien erst dann im Verzeichnis der Quelldatei wird normalerweise verwendet, um Headerdateien, die vom System geliefert werden, einzubinden (z.b. #include <stdio.h>) #include "name" sucht zuerst im Verzeichnis der Quelldatei erst dann im Verzeichnis der Systemdateien wird normalerweise verwendet, um selbst geschriebene Header-Dateien einzubinden (z.b. #include "debug.h") 37

84 I Compileroption(gcc) ErweitertbeimÜbersetzeneinesProgrammesdieListe derverzeichnisseindenennacheinerdateigesuchtwird. gcc Iincludehelloworld.c suchtnachstdio.hzuerstalsinclude/stdio.h,underst dannals/usr/include/stdio.h. 38

85 struct _IO_FILE *_chain; int _fileno; int _flags2; Präprozessor OutputvonHelloWorld off_t _old_offset; unsigned short _cur_column; #304"/usr/include/stdio.h"34 signed char _vtable_offset; char _shortbuf[1]; externintprintf( constchar* restrict format,...); _IO_lock_t *_lock; # 319 "/usr/include/libio.h" 3 4 off64_t _offset; # 328 "/usr/include/libio.h" 3 4 void * pad1; void * pad2; void * pad3; void * pad4; size_t pad5; int _mode; char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)]; }; typedef struct _IO_FILE _IO_FILE; _IO_FILE_plus; per Copy &struct Paste fügt #include den Inhalt der Datei stdio.h ein extern struct _IO_FILE_plus _IO_2_1_stdin_; extern struct _IO_FILE_plus _IO_2_1_stdout_; extern struct _IO_FILE_plus _IO_2_1_stderr_; # 364 "/usr/include/libio.h" 3 4 typedef ssize_t io_read_fn (void * cookie, char * buf, size_t nbytes); 39

86 Problem:Mehrfachinklusion Datei foo.h Datei bar.h #include bar.h #include baz.h #include baz.h Datei baz.h... 40

87 Problem:Mehrfachinklusion Datei foo.h Datei bar.h #include bar.h #include baz.h #include baz.h Datei baz.h... 41

88 Problem: Mehrfachinklusion Datei foo.h Datei bar.h #include bar.h #include baz.h #include baz.h Datei baz.h #include bar.h... 42

89 Problem:Mehrfachinklusion Datei foo.h Datei bar.h #include bar.h #include baz.h #include baz.h Datei baz.h #include bar.h... 43

90 VermeidungvonMehrfachinklusion Datei foo.h #ifndef FOO_H #define FOO_H extern int foo(int x, int y); #endif 44 Beim ersten Einfügen des Inhalts der Headerdatei in die Quelldatei wird gleichzeitig das Symbol FOO_H definiert. Der Versuch, diese Headerdatei ein zweitesmal einzufügen, scheitert an der bedingten Compilierung, da nun das Symbol FOO_H schon definiert ist. Es ist guter Programmierstil, zur Verhinderung von Mehrfach-Einfügen von Headerdateien oben beschriebenes Muster immer zu verwenden.

91 Der Präprozessor 45

92 Danke! 46

Compiler Präprozessor Header Files

Compiler Präprozessor Header Files Freitagsrunde C-Kurs 2012 Compiler Präprozessor Header Files Tutorium 3 ThisworkislicensedunderaCreativeCommonsAttribution NonCommercial ShareAlike3.0License Gliederung Compiler Präprozessor Header Files

Mehr

Compiler Präprozessor Header Files

Compiler Präprozessor Header Files Freitagsrunde C-Kurs 2013 Compiler Präprozessor Header Files Tutorium 3 This work is licensed under a Creative Commons Attribution NonCommercial ShareAlike 3.0 License Gliederung Compiler Präprozessor

Mehr

Compiler Präprozessor Header Files

Compiler Präprozessor Header Files Freitagsrunde C-Kurs 2011 Compiler Präprozessor Header Files Tutorium 3 This work is licensed under a Creative Commons Attribution NonCommercial ShareAlike 3.0 License Gliederung Compiler Präprozessor

Mehr

Compiler Präprozessor Header Files

Compiler Präprozessor Header Files Freitagsrunde C-Kurs 2010 Compiler Präprozessor Header Files Katrin Lang This work is licensed under a Creative Commons Attribution NonCommercial ShareAlike 3.0 License Gliederung Compiler Präprozessor

Mehr

Programmierung mit C Modularisierung von Programmen. Präprozessor-Anweisungen nutzen.

Programmierung mit C Modularisierung von Programmen. Präprozessor-Anweisungen nutzen. Programmierung mit C Modularisierung von Programmen. Präprozessor-Anweisungen nutzen. Modularisierung Zerlegung eines Programms in überschaubare Einheiten Die einzelnen Einheiten werden als Modul bezeichnet.

Mehr

FACHHOCHSCHULE MANNHEIM

FACHHOCHSCHULE MANNHEIM für Java-Programmierer Der Präprozessor Prof. Dr. Wolfgang Schramm FACHHOCHSCHULE MANNHEIM Hochschule für Technik und Gestaltung Präprozessor Ist dem Compiler vorgeschaltet ( Prä -). Spezielle Anweisungen

Mehr

Proseminar. C-Programmierung Grundlagen und Konzepte. Der Präprozessor. von: Svenja Neef

Proseminar. C-Programmierung Grundlagen und Konzepte. Der Präprozessor. von: Svenja Neef Proseminar C-Programmierung Grundlagen und Konzepte Der Präprozessor von: Svenja Neef Inhaltsverzeichnis 1Der C-Präprozessor...2 1.1Was ist der C-Präprozessor...2 1.2Präprozessor-Befehle...2 1.2.1Zusammenführen

Mehr

Programmübersetzung & modulare Programme INE2 M. Thaler, Office TG208

Programmübersetzung & modulare Programme INE2 M. Thaler, Office TG208 Programmübersetzung & modulare Programme INE2 M. Thaler, tham@zhaw.ch Office TG208 http://www.zhaw.ch/~tham 1 slide Um was geht es? C-Quellprogramm ausführbarer Code #include Quellecodedatei

Mehr

Einführung Makros Includes Errors und Warnings Pragmas Diverses. Der C-Präprozessor. Lukas Stabe. Universität Hamburg

Einführung Makros Includes Errors und Warnings Pragmas Diverses. Der C-Präprozessor. Lukas Stabe. Universität Hamburg Der C-Präprozessor Lukas Stabe Universität Hamburg Proseminar C - Grundlagen und Konzepte, 2013 Lukas Stabe C-Präprozessor 1 / 19 Inhalt 1. Einführung 2. Makros 3. Includes 4. Errors und Warnings 5. Pragmas

Mehr

8.1 Vom Quellcode zur ausführbaren Programm

8.1 Vom Quellcode zur ausführbaren Programm 8. Die Umgebung von C- 8.1 Vom Quellcode zur Programmausführung 8.2 Präprozessor-Anweisungen 8.3 Compiler, Assembler, Binder 8.4 Das Make-Utility 8.5 Datenübergabe vom und zum Betriebssystem 8-1 8.1 Vom

Mehr

Der C-Präprozessor. Lukas Stabe

Der C-Präprozessor. Lukas Stabe Der C-Präprozessor Lukas Stabe Inhaltsverzeichnis 1 Einleitung 1 2 Makros 1 2.1 Parameterlose............................ 1 2.2 Parameterbehaftete......................... 3 2.3 Verbreitete Fehler..........................

Mehr

Übungspaket 17 Der gcc Compiler

Übungspaket 17 Der gcc Compiler Übungspaket 17 Der gcc Compiler Übungsziele: Skript: 1. Sicherer Umgang mit gemischten Ausdrücken 2. Herleiten der unterschiedlichen Datentypen in gemischten Ausdrücken 3. Kenntnis über die implizite Durchführung

Mehr

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen Leibniz Universität IT Services Anja Aue Modularisierung Logische Gliederung von Programmteilen mit Hilfe von Namensräumen. Aufteilung

Mehr

Präprozessor und make. einfache Makros Makros nehmen eine Textersetzung vor. Erst nach der Ersetzung muss gültiger C-Code vorliegen.

Präprozessor und make. einfache Makros Makros nehmen eine Textersetzung vor. Erst nach der Ersetzung muss gültiger C-Code vorliegen. Bevor der eigentliche Kompilier-Vorgang stattfindet, wird vom sogenannten eine Vorverarbeitung durchgeführt. Hierbei werden zum Beispiel Kommentare entfernt, aber auch explizite Anweisungen an den verarbeitet.

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf  Seite 1 von 29 Kapitel 2 Einführung in C++ Seite 1 von 29 C++ Zeichensatz - Buchstaben: a bis z und A bis Z. - Ziffern: 0 bis 9 - Sonderzeichen: ; :,. # + - * / % _ \! < > & ^ ~ ( ) { } [ ]? Seite 2 von 29 Höhere Elemente

Mehr

Einführung in die C-Programmierung

Einführung in die C-Programmierung Einführung in die C-Programmierung Warum C? Sehr stark verbreitet (Praxisnähe) Höhere Programmiersprache Objektorientierte Erweiterung: C++ Aber auch hardwarenahe Programmierung möglich (z.b. Mikrokontroller).

Mehr

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz Patrick Schulz patrick.schulz@paec-media.de 29.04.2013 1 Einführung Einführung 2 3 4 Quellen 1 Einführung Einführung 2 3 4 Quellen Hello World in Java Einführung 1 public class hello_ world 2 { 3 public

Mehr

Peter Prinz. Das Übungsbuch. CTestfragen und Aufgaben mit Lösungen

Peter Prinz. Das Übungsbuch. CTestfragen und Aufgaben mit Lösungen Peter Prinz Das Übungsbuch CTestfragen und Aufgaben mit Lösungen Grundlagen Dieses Kapitel enthält grundlegende Fragen und Aufgaben zur Erstellung von C-Programmen. Hierzu gehören folgende Themen: Header-Dateien

Mehr

C - PRÄPROZESSOR. Seminar effiziente C Programmierung WS 2012/13. Von Christian Peter

C - PRÄPROZESSOR. Seminar effiziente C Programmierung WS 2012/13. Von Christian Peter C - PRÄPROZESSOR Seminar effiziente C Programmierung WS 2012/13 Von Christian Peter Themen Was sind Präprozessoren? Beispiele für Präprozessoren Funktionsweisen Der C - Präprozessor Der # Präfix #include

Mehr

Organisatorisches Einführung Quellen. Einführung. Praktikum C-Programmierung. Eugen Betke, Nathanael Hübbe, Michael Kuhn, Jakob Lüttgau, Jannek Squar

Organisatorisches Einführung Quellen. Einführung. Praktikum C-Programmierung. Eugen Betke, Nathanael Hübbe, Michael Kuhn, Jakob Lüttgau, Jannek Squar Einführung Praktikum C-Programmierung Eugen Betke, Nathanael Hübbe, Michael Kuhn, Jakob Lüttgau, Jannek Squar Wissenschaftliches Rechnen Fachbereich Informatik Universität Hamburg 2018-10-22 Michael Kuhn

Mehr

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften Teil 10: Präprozessor, Header und Bibliotheken Martin Nolte Abteilung für Angewandte Mathematik Universität Freiburg i. Br. Vorlesung

Mehr

Kurzeinführung in C/C++ Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Einleitung

Kurzeinführung in C/C++ Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Einleitung Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ 1 Einleitung Vorteile von Java: gut strukturiert mit hohem Funktionsumfang (mächtige Standardbibliothek) weitestgehend

Mehr

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff Programmieren in C Macros, Funktionen und modulare Programmstruktur Prof. Dr. Nikolaus Wulff Der C Präprozessor Vor einem Compile Lauf werden alle Präprozessor Kommandos/Makros ausgewertet. Diese sind

Mehr

4 PROGRAMMSTRUKTUR - WERKZEUGE

4 PROGRAMMSTRUKTUR - WERKZEUGE 4 PROGRAMMSTRUKTUR - WERKZEUGE Leitideen: Getrenntes Übersetzen und nachfolgendes Linken wird meistens mit Hilfe von Werkzeugen (z.b. make) durchgeführt. Bei Änderungen werden nicht alle Dateien neu übersetzt

Mehr

Propädeutikum. Dipl.-Inf. Frank Güttler

Propädeutikum. Dipl.-Inf. Frank Güttler Propädeutikum 2015 Vorbereitungskurs Informatikstudium Erfolgreich Studieren Programmieren (C-Kurs) guettler@informatik.uni-leipzig.de Universität Leipzig Institut für Informatik Technische Informatik

Mehr

Übungspaket 17 Der gcc Compiler

Übungspaket 17 Der gcc Compiler Übungspaket 17 Der gcc Compiler Übungsziele: Skript: 1. Sicherer Umgang mit gemischten Ausdrücken 2. Herleiten der unterschiedlichen Datentypen in gemischten Ausdrücken 3. Kenntnis über die implizite Durchführung

Mehr

Unterlagen. CPP-Uebungen-08/

Unterlagen.  CPP-Uebungen-08/ Unterlagen http://projects.eml.org/bcb/people/ralph/ CPP-Uebungen-08/ http://www.katjawegner.de/lectures.html Kommentare in C++ #include /* Dies ist ein langer Kommentar, der über zwei Zeilen

Mehr

Michael Dienert. 8. Dezember 2016

Michael Dienert. 8. Dezember 2016 C für Unverdrossene Michael Dienert 8. Dezember 2016 Vorbemerkung Natürlich könnte ich als erstes C-Programm Hello World nehmen. Um mit dem Kompiler zu spielen, kann man aber auch gleich einen sinnvolleren

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 8 Das Konfigurationswerkzeug make...8-2 8.1 Modularisierung...8-2 8.2 Modulübersetzung...8-4 8.3 Konfigurationswerkzeug make und Aufbau eines Makefiles...8-8 8.3.1 Abhängigkeiten und Kommandos...

Mehr

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens Grundlagen von C Jonas Gresens Proseminar C Grundlagen und Konzepte Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität

Mehr

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h>

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h> Allgemeines Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C #include int main() { printf( hello world\n ); return 0; } Peter Sobe 1 Verschiedene Sprachkonzepte

Mehr

Systemprogrammierung

Systemprogrammierung IEinführung I in die Programmiersprache C Literatur zur C-Programmierung: Darnell, Margolis. C: Software Engineering pproach. Springer 1991 Kernighan, Ritchie. The C Programming Language. Prentice-Hall

Mehr

Hochschule Für Angewandte Wissenschaften FH München Sommersemester Thomas Kolarz. Folie 1.

Hochschule Für Angewandte Wissenschaften FH München Sommersemester Thomas Kolarz. Folie 1. Praktikum Btib Betriebssysteme t I Hochschule Für Angewandte Wissenschaften FH München Sommersemester 2010 thomas.kolarz@hm.edu Folie 1 Vorbereitung Booten Sie den Rechner unter Linux und melden Sie sich

Mehr

Hello World! Eine Einführung in das Programmieren Das erste Programm

Hello World! Eine Einführung in das Programmieren Das erste Programm Hello World! Eine Einführung in das Programmieren Das erste Programm Görschwin Fey Institute of Embedded Systems Hamburg University of Technology Slide 2 Betriebssystem Funktion Anwendung Gerätesteuerung

Mehr

Vorlesung Informatik I

Vorlesung Informatik I Vorlesung Informatik I Universität Augsburg Wintersemester 2010/2011 Prof. Dr. Robert Lorenz Lehrprofessur für Informatik Programmieren in C Der Compilierungsprozess 1 Aufbau eines C-Programms 1. Direktiven

Mehr

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff Programmieren in C Eine Einführung in die Programmiersprache C Prof. Dr. Nikolaus Wulff Agenda Elementare Einführung C Programm Syntax Datentypen, Variablen und Konstanten Operatoren und Ausdrücke Kontrollstrukturen

Mehr

Kapitel 5: Programmerzeugung. Präprozessor Übersetzer Fehlersuche Debugger Entwicklungsumgebungen

Kapitel 5: Programmerzeugung. Präprozessor Übersetzer Fehlersuche Debugger Entwicklungsumgebungen für Elektrotechniker Kapitel 5: Programmerzeugung Präprozessor Übersetzer Fehlersuche Debugger Entwicklungsumgebungen Präprozessor Präprozessor Aufgaben Einfügen von Dateien (#include...) Ersetzen von

Mehr

Praxisorientierte Einführung in C++ Lektion: "Die Compiler-Chain (Vom Quellcode zum ausführbaren Programm)"

Praxisorientierte Einführung in C++ Lektion: Die Compiler-Chain (Vom Quellcode zum ausführbaren Programm) Praxisorientierte Einführung in C++ Lektion: "Die Compiler-Chain (Vom Quellcode zum ausführbaren Programm)" Christof Elbrechter Neuroinformatics Group, CITEC April 24, 2014 Christof Elbrechter Praxisorientierte

Mehr

Vorlesung Informatik I

Vorlesung Informatik I Vorlesung Informatik I Universität Augsburg Wintersemester 2011/2012 Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 11. Programmieren in C Der Compilierungsprozess 1 Aufbau eines C-Programms 1. Direktiven

Mehr

Programm in Source-Files aufteilen Erhöht Lesbarkeit Aufteilung orientier t sich an logischer Struktur des Programms Getrenntes Übersetzen möglich:

Programm in Source-Files aufteilen Erhöht Lesbarkeit Aufteilung orientier t sich an logischer Struktur des Programms Getrenntes Übersetzen möglich: Source-Files Programm == Source-File nicht sinnvoll Unübersichtlich Bei jeder kleinen Änderung gesamtes File neu übersetzen Übersetzen dauert lange Keine Gruppenarbeit möglich Programm in Source-Files

Mehr

6. Grundlagen der Programmierung

6. Grundlagen der Programmierung Computeranwendung in der Chemie Informatik für Chemiker(innen) 6. Grundlagen der Programmierung Jens Döbler 2003 "Computer in der Chemie", WS 2003-04, Humboldt-Universität VL6 Folie 1 Dr. Jens Döbler Grundlagen

Mehr

Praxisorientierte Einführung in C++ Lektion: "Die Compiler-Chain (Vom Quellcode zum ausführbaren Programm)"

Praxisorientierte Einführung in C++ Lektion: Die Compiler-Chain (Vom Quellcode zum ausführbaren Programm) Praxisorientierte Einführung in C++ Lektion: "Die -Chain (Vom zum ausführbaren Programm)" Christof Elbrechter Neuroinformatics Group, CITEC April 19, 2012 Christof Elbrechter Praxisorientierte Einführung

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)

Mehr

C/C++ Programmierung

C/C++ Programmierung 1 C/C++ Programmierung Grundlagen: Der Präprozessor Sebastian Hack Christoph Mallon (hack mallon)@cs.uni-sb.de Fachbereich Informatik Universität des Saarlandes Wintersemester 2009/2010 2 Der Präprozessor

Mehr

DAP2-Programmierpraktikum Einführung in C++ (Teil 1)

DAP2-Programmierpraktikum Einführung in C++ (Teil 1) DAP2-Programmierpraktikum Einführung in C++ (Teil 1) Carsten Gutwenger 11. April 2008 Lehrstuhl 11 Algorithm Engineering Fakultät für Informatik, TU Dortmund Überblick Mein erstes C++-Programm Namensräume

Mehr

Inhaltsverzeichnis. Inhalt. Bemerkung... 9 Vorwort Programme und Programmiersprachen

Inhaltsverzeichnis. Inhalt. Bemerkung... 9 Vorwort Programme und Programmiersprachen Inhalt 3 Bemerkung... 9 Vorwort... 10 1 Programme und Programmiersprachen 1.1 Assembler... 13 1.2 Höhere Programmiersprachen... 15 1.2.1 Interpreter... 16 1.2.2 Compiler... 17 1.2.3 Zwischencode... 18

Mehr

C- Kurs 06 Übersetzung & Module

C- Kurs 06 Übersetzung & Module C- Kurs 06 Übersetzung & Module Dipl.- Inf. Jörn Hoffmann jhoffmann@informaek.uni- leipzig.de Universität Leipzig InsEtut für InformaEk Technische InformaEk Übersetzung Überblick Übersetzung mit Modulen

Mehr

Programmiersprachen Einführung in C

Programmiersprachen Einführung in C Programmiersprachen Einführung in C 14 Vertiefung einiger Themen Prof. Dr. Gliederung Programmiersprachen 1. Von der Maschinensprache zu C 2. Die Struktur von C-Programmen 3. Variable und Datentypen in

Mehr

Einleitung. Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Kurzeinführung in C/C++

Einleitung. Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Kurzeinführung in C/C++ Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ 1 Einleitung Vorteile von Java: gut strukturiert mit hohem Funktionsumfang (mächtige Standardbibliothek) weitestgehend

Mehr

Grundlagen der Informatik. Mathias Buhr

Grundlagen der Informatik. Mathias Buhr Grundlagen der Informatik 1 Übersicht - 2.Übung Rückblick 1. Übung Compiler prozedurale Programmierung in C Variablen Funktionen Kontrollstrukturen Literatur 2 Rückblick Information & Entropie Zahlensysteme

Mehr

Modellierung und Programmierung

Modellierung und Programmierung Modellierung und Programmierung Dr. Martin Riplinger 16.1.2013 IAM Institut für Angewandte Mathematik C-Präprozessor: Einfügungen Standard-Header #include Fügt den Text der Headerdatei

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)

Mehr

Grundlagen der Informatik Vorlesungsskript

Grundlagen der Informatik Vorlesungsskript Grundlagen der Informatik Vorlesungsskript Prof. Dr. T. Gervens, Prof. Dr.-Ing. B. Lang, Prof. Dr. F.M. Thiesing, Prof. Dr.-Ing. C. Westerkamp 16 AUTOMATISCHES ÜBERSETZEN VON PROGRAMMEN MIT MAKE... 2 16.1

Mehr

INE1 Präprozessor, Module. Prä(ääh)prozessor, Compiler und Linker, Lader Der Präprozessor Bedingte Übersetzung Modulare Programmierung

INE1 Präprozessor, Module. Prä(ääh)prozessor, Compiler und Linker, Lader Der Präprozessor Bedingte Übersetzung Modulare Programmierung INE1 Präprozessor, Module Prä(ääh)prozessor, Compiler und Linker, Lader Der Präprozessor Bedingte Übersetzung Modulare Programmierung 1 Präprozessor, Compiler, Linker, Lader 2 von 66 Direkt ausführbarer

Mehr

K Ergänzungen zur Einführung in C

K Ergänzungen zur Einführung in C K Ergänzungen zur Einführung in C K Ergänzungen zur Einführung in C K.1 Zeiger, Felder und Zeichenketten Zeichenketten sind Felder von Einzelzeichen (char), die in der internen Darstellung durch ein \0

Mehr

Die Programmiersprache C

Die Programmiersprache C Die Programmiersprache C höhere Programmiersprache (mit einigen assemblerähnlichen Konstrukten) gut verständliche Kommandos muss von Compiler in maschinenlesbaren Code (Binärdatei) übersetzt werden universell,

Mehr

Teil II. Literatur zur C-Programmierung:

Teil II. Literatur zur C-Programmierung: Teil II 2Kurzeinführung in die Programmiersprache C Literatur zur C-Programmierung: Darnell, Margolis. C: A Software Engineering Approach. Springer 1991 Kernighan, Ritchie. The C Programming Language.

Mehr

Softwarepraktikum: Einführung in gcc / g++

Softwarepraktikum: Einführung in gcc / g++ Softwarepraktikum: Einführung in gcc / g++ (Eingebettete Systeme und Robotik),, http://ai3.inf.uni-bayreuth.de /home/db_lehre/softwarepraktikum/einfuehrungsvortraege/gcc-vortrag.01.sxi Unterschied gcc

Mehr

Teil 3: Lexik, Funktionen, Makefiles Gliederung

Teil 3: Lexik, Funktionen, Makefiles Gliederung Teil 3: Lexik, Funktionen, Makefiles Gliederung Lexik Zinsberechnung Eigene Funktionen Makefiles Lexik 2 Bearbeitungsschritte des Compilers 1. Lexikalische Analyse 2. Syntaxanalyse 3. Semantische Analyse

Mehr

Programmierkurs. Interdisciplinary Center for Scientific Computing, Heidelberg University. November 17, 2017

Programmierkurs. Interdisciplinary Center for Scientific Computing, Heidelberg University. November 17, 2017 Programmierkurs Ole Klein Steffen Müthing Interdisciplinary Center for Scientific Computing, Heidelberg University November 17, 2017 Standardbibliothek Variablen und Referenzen Aufrufkonventionen Der C++-Kompilierprozess

Mehr

Beispiel. Problem: mehrteilige Nachnamen (von Goethe, Mac Donald, Di Caprio)

Beispiel. Problem: mehrteilige Nachnamen (von Goethe, Mac Donald, Di Caprio) Beispiel Beispiel: Namensliste konvertieren (Karl Egon Meier Meier, Karl Egon). s/(.*) (.*)/$2, $1/; Problem: mehrteilige Nachnamen (von Goethe, Mac Donald, Di Caprio) s/(.*) (.*)/$2, $1/; s/(.*) ([a-z]+

Mehr

2Binden 3. und Bibliotheken

2Binden 3. und Bibliotheken 3 Vom C-Programm zum laufenden Prozess 3.1 Übersetzen - Objektmodule 1Übersetzen 3. - Objektmodule (2) Teil III 3Vom C-Programm zum laufenden Prozess 2. Schritt: Compilieren übersetzt C-Code in Assembler

Mehr

Algorithmus: Kochrezept

Algorithmus: Kochrezept Algorithmus: Kochrezept Ziel: Menü mit drei Gängen für 4 Personen Grundlegende Spezifikation: 1. Vorspeise: Badische Flädlesuppe 2. Hauptgericht: Überbackene Schinkenröllchen mit Spargel 3. Dessert: Vanilleeis

Mehr

Übungen zu Systemprogrammierung 1

Übungen zu Systemprogrammierung 1 Übungen zu Systemprogrammierung 1 Ü1-2 Speicherverwaltung Sommersemester 2018 Christian Eichler, Jürgen Kleinöder Lehrstuhl für Informatik 4 Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl

Mehr

Outline. 1 Einleitung. 2 Einführung in C. 3 Fortgeschrittenes in C. 4 Einführung in Emacs Lisp. 5 Einführung in Prolog. 6 Formale Semantik

Outline. 1 Einleitung. 2 Einführung in C. 3 Fortgeschrittenes in C. 4 Einführung in Emacs Lisp. 5 Einführung in Prolog. 6 Formale Semantik Outline 1 Einleitung 2 Einführung in C 3 Fortgeschrittenes in C 4 Einführung in Emacs Lisp 5 Einführung in Prolog 6 Formale Semantik Imperative Programmierung Imperatives Paradigma Ziel: Ablaufbeschreibung

Mehr

Übungen zu Systemprogrammierung 1 (SP1)

Übungen zu Systemprogrammierung 1 (SP1) Übungen zu Systemprogrammierung 1 (SP1) Ü1-2 Speicherverwaltung Andreas Ziegler, Stefan Reif, Jürgen Kleinöder Lehrstuhl für Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität

Mehr

Einheit Lexikalische Grundlagen der Programmiersprache C Lexikalische Einheiten

Einheit Lexikalische Grundlagen der Programmiersprache C Lexikalische Einheiten Einheit Lexikalische Grundlagen der Programmiersprache C Lexikalische Einheiten Kurs C/C++ Programmierung, WS 2008/2009 Dipl.Inform. R. Spurk Arbeitsgruppe Programmierung FR 6.2 Informatik R. Spurk (Informatik)

Mehr

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

Grundlagen. Die Komponenten eines C Programms. Das erste Programm Grundlagen 1. Die Komponenten eines C Programms 2. Ein Programm erzeugen und übersetzen 3. Variablen Deklarieren und Werte zuweisen 4. Zahlen eingeben mit der Tastatur 5. Arithmetische Ausdrücke und Berechnungen

Mehr

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15 Vorwort... 15 1 Einstieg in die Welt von C 17 1.1 Die Sprache C... 17 1.2 Die C-Standardbibliothek... 18 1.3 Die nötigen Werkzeuge für C... 21 1.4 Übersetzen mit der Entwicklungsumgebung... 23 1.5 Übersetzen

Mehr

C Kurzeinführung in die Programmiersprache C. C-3 Datentypen und Variablen. C-2 Struktur eines C-Programms. C-1 Überblick. 1 Standardtypen in C

C Kurzeinführung in die Programmiersprache C. C-3 Datentypen und Variablen. C-2 Struktur eines C-Programms. C-1 Überblick. 1 Standardtypen in C C Kurzeinführung in die Programmiersprache C C Kurzeinführung in die Programmiersprache C Literatur zur C-Programmierung: Datentypen legen fest: Darnell, Margolis. C: A Software Engineering Approach. Springer

Mehr

C Kurzeinführung in die Programmiersprache C

C Kurzeinführung in die Programmiersprache C C Kurzeinführung in die Programmiersprache C C Kurzeinführung in die Programmiersprache C Literatur zur C-Programmierung: Darnell, Margolis. C: A Software Engineering Approach. Springer 1991 Kernighan,

Mehr

Herzlich willkommen!

Herzlich willkommen! Programmiertechnik 1 Herzlich willkommen! Dozent: Dipl.-Ing. Jürgen Wemheuer Teil 6: Zusammenfassung und Beispiele Mail: wemheuer@ewla.de Online: http://cpp.ewla.de/ Zusammenfassung (1) 2 1. Programm in

Mehr

Compiler und Präprozessor (1) Erstellen eines Projektes

Compiler und Präprozessor (1) Erstellen eines Projektes Compiler und Präprozessor (1) Erstellen eines Projektes Projekte bestehen meist aus mehreren Dateien, z.b. Quelldateien, Funktionssammlungen in Bibliotheken Zur Definition eines Projektes sind folgende

Mehr

Übung zu Grundlagen der Betriebssysteme. Einführungsveranstaltung 16.10.2012

Übung zu Grundlagen der Betriebssysteme. Einführungsveranstaltung 16.10.2012 Übung zu Grundlagen der Betriebssysteme Einführungsveranstaltung 16.10.2012 Termine Übungen wöchentlich, Dienstags 14 Uhr (c.t.), Raum E312 15 Uhr (s.t.), Raum E312 Jede Woche 1 Übungsblatt http://userpages.uni-koblenz.de/~mips/bs/uebung/

Mehr

L4. Erster Schritt zum Programmieren

L4. Erster Schritt zum Programmieren L4. Erster Schritt zum Programmieren 1 Programmierung in Hoch Beispielprogramme in FORTRAN, PASCAL und C Die Programmiersprache C Erstellung und Übersetzung eines C-Programms Das Programm Hello World Eingabe

Mehr

1. Vom Sourcecode zum Programm

1. Vom Sourcecode zum Programm 1. Vom Sourcecode zum Programm 1.1 Programmablauf source1.cpp source2.cpp header.h makefile Compiler Präprozessor Übersetzer Assembler object.obj object.obj Linker library.dll programm.exe Abbildung: Erstellung

Mehr

Programmierung in C: Vermischtes (Teil 1)

Programmierung in C: Vermischtes (Teil 1) Programmierung in C: Vermischtes (Teil 1) Gültigkeitsbereiche für Variablen C-Präprozessor (#define EPS 0.00001) Inkremtieren und Dekrementieren ( jahr++; restzeit--;) Speicherklassen (static) Typecasts

Mehr

Systemprogrammierung

Systemprogrammierung Systemprogrammierung 3Vom C-Programm zum laufenden Prozess 6. November 2008 Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2008 SS 2006 SOS 1 (03-Pro.fm 2008-11-06 08.52) 3 Vom C-Programm

Mehr

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9 Informatik I 2 Übung 9 Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9 Quellcode Strukturieren Wenn alle Funktionen in einer Datei zusammengefasst sind wird es schnell unübersichtlich Mehrere

Mehr

Grundlagen der Programmierung

Grundlagen der Programmierung Grundlagen der Programmierung 5. Vorlesung 09.11.2016 1 Beispiel: Hello World #include Beginn Hauptprogramm int main() { Blockbeginn printf("hello World\n"); Einbinden der Headerdatei(en) für

Mehr

Propädeutikum. Dipl.-Inf. Frank Güttler

Propädeutikum. Dipl.-Inf. Frank Güttler Propädeutikum 2015 Vorbereitungskurs Informatikstudium Erfolgreich Studieren Programmieren (C-Kurs) guettler@informatik.uni-leipzig.de Universität Leipzig Institut für Informatik Technische Informatik

Mehr

Syntax und Kontrollstrukturen

Syntax und Kontrollstrukturen Syntax und Kontrollstrukturen Praktikum C-Programmierung Eugen Betke, Nathanael Hübbe, Michael Kuhn, Jakob Lüttgau, Jannek Squar Wissenschaftliches Rechnen Fachbereich Informatik Universität Hamburg 2018-10-29

Mehr

Fortgeschrittene Ein- und Ausgabe: Beispiel. Fortgeschrittene Ein- und Ausgabe: Beispiel

Fortgeschrittene Ein- und Ausgabe: Beispiel. Fortgeschrittene Ein- und Ausgabe: Beispiel Fortgeschrittene Ein- und Ausgabe: Beispiel 1 #include 2 3 int main(void) 4 { 5 FILE *datenstrom; 6 7 datenstrom = fopen("testdatei.txt", "r"); 8 if (datenstrom == NULL) 9 { 10 fprintf(stderr,

Mehr

Grundlagen der Programmentwicklung

Grundlagen der Programmentwicklung Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling benedict.reuschling@h-da.de Hochschule Darmstadt Fachbereich Informatik WS 2013/14 Über C++ Über C++ C++ ist eine in der Industrie

Mehr

Übersicht. C Modularisierung. Präprozessor, Compiler, Linker. Präprozessor, Compiler, Linker. Präprozessor, Compiler und und Linker Linker

Übersicht. C Modularisierung. Präprozessor, Compiler, Linker. Präprozessor, Compiler, Linker. Präprozessor, Compiler und und Linker Linker Übersicht Präprozessor, Compiler und und Linker Linker Befehle des Präprozessors C Modularisierung Bedingte Kompilierung Modulare Programmierung Prinzipien der Modularisierung 1 2 Präprozessor, Compiler,

Mehr

DLLs (dynamic loaded libraries) mit MingW erstellen

DLLs (dynamic loaded libraries) mit MingW erstellen DLLs (dynamic loaded libraries) mit MingW erstellen Autor: Michel D. Schmid Datum: April 2, 2009 Contents 1 Einführung 1 1.1 Open-Source Tools.......................................... 1 2 Beispiel 1:

Mehr

Übungspaket 28 Module und getrenntes Übersetzen

Übungspaket 28 Module und getrenntes Übersetzen Übungspaket 28 Module und getrenntes Übersetzen Übungsziele: Skript: 1. Verteilen von Programmteilen auf mehrere Dateien 2. Richtige Verwendung der Header-Dateien 3. Richtiger Umgang mit dem C-Compiler

Mehr

5. Modulare Programmierung

5. Modulare Programmierung C und C++ (CPP) 5. Modulare Programmierung Prof. Dr. Marc Rennhard Institut für angewandte Informationstechnologie InIT ZHAW Zürcher Hochschule für angewandte Wissenschaften marc.rennhard@zhaw.ch Marc

Mehr

Modulare Programmierung und Bibliotheken

Modulare Programmierung und Bibliotheken Modulare Programmierung und Bibliotheken Proseminar-Vortrag am 24.06.2011 von Ludwig Eisenblätter Ludwig Eisenblätter 1 von 25 Modulare Programmierung und Bibliotheken Inhaltsübersicht Motivation / Einleitung

Mehr

Installationsanleitung

Installationsanleitung 1. C Installationsanleitung C-Programmierung mit Hilfe von Eclipse unter Windows XP mit dem GNU C-Compiler (GCC) 2. Inhaltsverzeichnis 1. Einleitung... 3 2. Cygwin... 3 2.1 Cygwin-Installation... 3 2.2

Mehr

INE1 Präprozessor, Module

INE1 Präprozessor, Module INE1 Präprozessor, Module Prä(ääh)prozessor, Compiler und Linker, Lader Der Präprozessor Bedingte Übersetzung Modulare Programmierung Anhang: make-utility 1 Präprozessor, Compiler, Linker, Lader 2 von

Mehr

Systempraktikum im Wintersemester 2009/2010 (LMU): Vorlesung vom Foliensatz 2

Systempraktikum im Wintersemester 2009/2010 (LMU): Vorlesung vom Foliensatz 2 Systempraktikum im Wintersemester 2009/2010 (LMU): Vorlesung vom 29.10. Foliensatz 2 Modularisierung (T) Eigene Headerdateien und Bibliotheken (P) Arten der Parameterübergabe (P) Arrays und Strukturen

Mehr

Einführung in die Programmiersprache C Software Entwicklung 1

Einführung in die Programmiersprache C Software Entwicklung 1 Einführung in die Programmiersprache C Software Entwicklung 1 Annette Bieniusa, Mathias Weber, Peter Zeller Dieses Skript gibt nur einen kleinen Einblick in C. Für eine ausführlichere und vertiefte Darstellung

Mehr

Programmentwicklung mit C++ (unter Unix/Linux)

Programmentwicklung mit C++ (unter Unix/Linux) Programmentwicklung mit C++ (unter Unix/Linux) Erste Schritte Der gcc - Compiler & Linker Organisation des Source-Codes & Libraries Automatische Programmgenerierung: Make Birgit Möller & Denis Williams

Mehr