INE1 Präprozessor, Module

Größe: px
Ab Seite anzeigen:

Download "INE1 Präprozessor, Module"

Transkript

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

2 Präprozessor, Compiler, Linker, Lader 2 von 75

3 Direkt ausführbarer Code vs Virtuelle Maschinen C/C++ Programmquelle wird in EXE/DLL übersetzt (Maschine Code) um dann direkt ausgeführt zu werden Ausführbare Einheiten Bestehen aus (Maschinen-)Code Werden durch Funktionen des jeweiligen Betriebssystems unterstützt Unterschied Java/C# (später) Programmquelle wird in.class File (sog. VM Code) übersetzt und dann anschliessend durch VM ausgeführt Ausführbare Einheiten Bestehen aus Code der von VM ausgeführt wird; VM läuft auf verschiedenen Plattform Werden durch ein umfangreiches Laufzeitsystem (Virtual Runtime Environment: VRE) unterstützt 3 von 75

4 Übersetzungs-/Ausführungsvorgang Übersetzung/Ausführung in vier Phasen 1. Präprozessor: textuelle Vorverarbeitung 2. Erzeugung von Maschinen-Code (Linkbare-Einheiten): Compilation 3. Erzeugung von ausführbaren Einheiten (.exe): Linking 4. Ausführung C-Quellen Dateien.c,.h Linkbare Einheiten.obj Ausführbare Einheiten.exe Compilation Linking normalerweise normalerweise nicht nicht an an Zwischenprodukt Zwischenprodukt interessiert interessiert 4 von 75

5 Präprozessor, Compiler, Linker, Lader 1. Der Präprozessor sucht in den Quelltexten nach speziellen Befehlen, um dann im wesentlichen textuelle Ersetzungen durchzuführen 2. Der Compiler wandelt den so geänderten Code in Objektcode um, der aber noch offene Aufrufe enthält 3. Der Linker verbindet die noch offenen Funktionsaufrufe mit den zugehörigen Funktionen 4. Der Lader lädt das Programm mit den Abhängigkeiten (Windows.DLL) in den Speicher und startet die "main" Funktion 5 von 75

6 Die 3 Phasen der Übersetzung Übersetzung von C/C++ in 3 Phasen 1. Phase: Präprozessor (rein textuelle Substitutionen) Präprozessor Direktiven alle mit # Beispiele: #define PI #include <stdio.h> 2. Phase: Übersetzung in Maschinencode obj-dateien: (linkbare Einheit) 3. Phase: Linken der Teile zu ausführbarem Programm 6 von 75

7 Phase 1: Erzeuge Quelle für Compilation Vorverarbeitung (1. Schritt) stdio.h hello.c #include<stdio.h> #include "hello.c" int main () { } Präprozessor Compilation 7 von 75

8 Phase 1: Präprozessor-"Direktiven" Anwendung Definition von Konstanten Einbeziehen von anderen Quellen (Header Files) Ein-/Ausblenden von Blöcken (z.b. Debug Code) #define PI #include "filename" /* from the current directory */ #include <filename> /* from the system directories */ #define DEBUG /* defines the symbol DEBUG */ #ifdef DEBUG /* code here is compiled if DEBUG is defined */ #elif defined UNIX /* code here is compiled if DEBUG is not defined, and UNIX is defined */ #else /* code here is compiled if neither DEBUG or UNIX are defined */ #endif #ifndef DEBUG /* test if symbol is not defined */ #undef DEBUG /* undefines a symbol */ 8 von 75

9 Phase 1: Logische Aufteilung in C und H Files C Files C-Programmquellen ->.c H(eader)-Files ~ "Dateien mit Funktionsdeklarationen" ->.h Sammlungen von vordeklarierten (Prototyp-) Funktionen (keine Implementationen!) Definition von allgemein verwendeten Typen und Konstanten System Header Files Beschreibung der Schnittstelle zu Betriebssystem und Bibliotheken (Funktionsprototypen) Beispiele stdio.h : Standard Ein/Ausgabe string.h : String Funktionen Eigene Header-Files zur besseren Strukturierung des Programms 9 von 75

10 Phase 2: Compiler Der Compiler bekommt den vom Präprozessor überarbeiteten Quelltext und setzt ihn in einen Objektcode um Objektcode Maschinen-Code Nicht ausführbar, da noch unaufgelöste Referenzen (z.b. Bibliotheks-Funktionsaufrufe) enthalten sind Meistens mit der Endung.o oder.obj 10 von 75

11 Phase 2: Weitere Aufgaben des Compilers Prüfung auf syntaktische und grammatische Fehler Statische Typprüfung Teilweise Warnung für logische Fehler Anlegen von Tabellen, in denen Buch über die verwendeten Variablen geführt wird 11 von 75

12 Phase 3: Linker Linkbare Einheiten (.obj) werden zu ausführbaren Einheit (exe,dll) zusammengebunden ("linken") C-Compilation hello.obj 33 Assembler baba.obj 3 3 Linking hello.exe main() Pascal- Compilation tatu.obj 3 3 Linking tatu.dll foo() 12 von 75

13 Phase 3: Linker Setzt die vom Compiler generierten Objektmodule zu einem ausführbaren Programm zusammen (EXE) Sucht nach Funktionsaufrufen und den dazugehörigen Funktionen Überprüft, ob alle Variablen, die nur deklariert wurden (extern, s.u.), auch irgendwo definiert sind Es gibt zwei Varianten von Linking statisch: der Bibliotheks Code wird in das EXE hinein gepackt dynamisch: der Bibliotheks Code wird nur als externe Referenz vermerkt und der Lader löst dann diese auf Nach dem Linken: ausführbares Programm 13 von 75

14 Phase 3: Einbinden der Standard-Bibliotheken Der Linker sucht auch in speziellen Dateien, den Bibliotheken, um alle Referenzen aufzulösen in Windows: Bibliotheken in sog. DLL Dateien in Linus: in sog..so Dateien In C: eine Bibliothek ist eine Sammlung von Funktionen Der Linker sucht in der Standard-Bibliothek nach allen verwendeten Funktionen Für C sind eine Reihe Standard-Bibliotheken vorgegeben Zusätzliche Bibliotheken müssen beim Linken angegeben werden 14 von 75

15 Phase 4: Ausführung/Lader Bringe ausführbare Einheiten zur Ausführung. Lädt EXE und davon abhängige DLLs in den Speicher springt zu Einsprungstelle (main) Teil Teil des des Betriebssystems Betriebssystems hello.exe 4 4 Lader c:> tatu.dll von 75

16 Überblick Übersetzungs-/Ausführungsvorgang Präprozessor C-Compilation Linker Lader hello.c 1 1 hello.pre 2 2 hello.obj 3 3 hello.exe hello.h Assembler baba.obj 3 tatu.dll baba.asm 2 16 von 75

17 Der Präprozessors 17 von 75

18 Präprozessor Wichtig bei allen Präprozessorbefehlen ist: Sie führen textuelle Änderungen am Quellcode aus Präprozessorbefehle werden auch Direktiven genannt Wird i.d.r. nicht separat ausgeführt Ist Teil des C Compilers Kann via Kommandozeile aber aufgerufen werden gcc -E... -E -E Stop Stop after after the the Präprocessing Präprocessing stage; stage; do do not not run run the the compiler compiler proper. proper. The The output output is is in in the the form form of of Präprocessed Präprocessed source source code, code, which which is is sent sent to to the the standard standard output. output. 18 von 75

19 Warum ein Präprozessor? Ursprünglich: Code kompakter und lesbarer machen Aber: Man kann damit auch schwer zu findende Fehler in den Code einbauen... In späteren C Versionen wurden Sprachmittel eingeführt, mit denen sich viele Präprozessor-Befehle vermeiden lassen z.b. Konstanten nicht mehr mit #define 19 von 75

20 Präprozessor Der Präprozessor hat folgende Aufgaben: Dateien in andere einfügen Konstanten definieren Makros zur Verfügung stellen Teile des Quelltextes selektieren #include #define #define #ifdef, #ifndef 20 von 75

21 Präprozessor-Befehle Beispiel: #include "dateiname" Der Präprozessor arbeitet zeilenorientiert Bei einer Präprozessor-Anweisung das Zeichen "#" vorangestellt sein Kein Semikolon am Ende! 21 von 75

22 Dateien einbinden Befehl: #include Beim Einfügen der Datei wird der Quelltext der Datei eingefügt Meistens verwendet um Konstanten, Deklarationen von Typen und Funktionen (Prototypen) in einen Quelltext einzubinden Zwei Varianten: #include <Dateiname> #include "Dateiname" Erste Variante für das Einbinden von Header-Dateien aus Standard-Bibliotheken (in einem speziellen "Standard-Verzeichnis" abgelegt) Zweite Variante für projektspezifische Header-Dateien 22 von 75

23 Konstanten definieren Befehl #define Beispiel: #define MAXLOOP Über diese Anweisung können auch Ersetzungen durchgeführt werden Wird der Name irgendwo im Programmcode gefunden, wird an dieser Stelle der Ersetzungstext eingefügt, ausgenommen in Zeichenketten und Kommentaren 23 von 75

24 Konstanten definieren Was durch define definiert wird, wird im allgemeinen als Makro bezeichnet Ein Makro ohne Parameter wird auch als symbolische Konstante bezeichnet Wenn der Makroname in einem String-Literal auftaucht, wird er nicht ersetzt Konvention: Namen von symbolischen Konstanten gross schreiben 24 von 75

25 Konstanten definieren Beispiel Verwendung #define ANZAHL 10 /* meistens besser: */ int feld [ANZAHL]; int j = ANZAHL; const int ANZAHL=10; /* oder: */ enum {ANZAHL=10 }; 25 von 75

26 Konstanten definieren Wichtig: Der Präprozessor ersetzt diese Symbole rein textuell Auf diese Weise können durch den Präprozessor auch leicht Fehler in den Code eingebaut werden: #define I 10 int I = 20; /* wird zu: int 10 = 20; */ 26 von 75

27 Beispiel $ cpp prep.c # 1 "prep.c" # 1 "<built-in>" # 1 "<command-line>" # 1 "prep.c" int main() { double p = 3.14; // 3.14 char tx2[] = "drei"; char tx1[] = "abc ZAHL TEXT de"; return 0; } 27 von 75

28 Vordefinierte Konstanten FILE zwei zwei Underscores Underscores Name der Datei, die gerade übersetzt wird DATE Datum des Übersetzungsvorgangs TIME LINE STDC cplusplus cdecl Uhrzeit, zu der der Übersetzungsvorgang gestartet wurde Aktuelle Zeile der Datei, in der der Compiler sich gerade befindet Erfüllt, wenn im Standard-C Modus übersetzt wird Es wurde mit einem C++ Compiler compiliert Verwende die C Aufruf Konvention 28 von 75

29 Vordefinierte Konstanten /* Ausgabe der Dateiversion: */ printf("version vom %s um %s von %s\n", DATE, TIME, FILE ); /* Ausgabe der Zeile bei Fehlern: */ if (nenner == 0) { printf("schwerer Fehler (Division durch Null) in " "%s, Zeile %s\n", FILE, LINE ); exit(1); } 29 von 75

30 Makros In der #define-direktive können nach dem Namen des Symbols auch zusätzliche Parameter in Klammern angegeben werden Diese können im zu ersetzenden Text wieder auftauchen, wo sie dann textuell eingesetzt werden #define MAKRO(Argl, Arg2,...) Ersetzungstext Hinter dem Makronamen darf kein Leerzeichen folgen 30 von 75

31 Makros Es kann vorkommen, dass eine Anweisung nicht in eine Zeile passt Dann wird das Fortsetzungszeichen "\" verwendet Beispiel: #define ALERT(meintext) \ printf("###########################"); \ printf("%s", meintext); \ printf("###########################"); 31 von 75

32 Beispiel $ cpp makro.c # 1 "makro.c" # 1 "<built-in>" # 1 "<command-line>" # 1 "makro.c" int main() { int k = 3, m = 34; double f = 3.1, g = 4.4; {int j; j=k; k=m; m=j; }; printf("getauscht!"); {int j; j=f; f=g; g=j; }; } return 0; 32 von 75

33 Makros: Probleme Mit Makros ist Vorsicht angebracht, da leicht Fehler eingebaut werden können Beispiel: #define Quadrat(x) x*x Quadrat(5+3); /* ergibt 5+3*5+3 = 23 statt 64 */ Besser die Argumente von Makros in Klammern schreiben: #define Quadrat(x) ((x)*(x)) 33 von 75

34 Makros: Probleme Noch besser: Man sollte Funktionen vorziehen, da Fehler, die über Makros entstehen, schwerer zu finden sind In C99 und C++ können Präprozessor-Konstanten und -Makros meistens besser durch const und Inline-Funktionen (C++) realisiert werden "Almost every macro demonstrates a flaw in the programming language, in the program, or in the programmer." (Bjarne Stroustrup) 34 von 75

35 Bedingte Übersetzung 36 von 75

36 Konstanten abfragen Es ist nicht nötig, einem solchen Symbol auch einen Wert zuzuweisen Auch eine Definition ohne Wert kann sinnvoll sein, da abgefragt werden kann, ob ein Symbol definiert ist oder nicht Befehle: #ifdef #ifndef #undef Test, ob Symbol definiert Test, ob Symbol nicht definiert Danach ist Symbol nicht (mehr) definiert 37 von 75

37 Bedingte Übersetzung Man kann den Präprozessor auch dazu nutzen, Teile des Quelltextes zu selektieren Verhindern einer mehrfachen Übersetzung Selektieren von Debugging-Code Plattform übergreifende Programmierung Präprozessorbefehle für diese Funktionen: #ifdef und #ifndef Beide werden mit #endif abgeschlossen Nach #else kann ein Alternativzweig angegeben werden 38 von 75

38 Mehrfache Übersetzung/Includes verhindern Beim Einbinden von Quelltexten (meist Header-Files) mit #include muss verhindert werden, dass gleiche Dateien mehrmals eingefügt werden Grund: Mehrfache Definitionen sind nicht zulässig Dazu wird folgende Struktur verwendet (im Header File): #ifndef c_h c.h #ifndef Dateikennung #define Dateikennung // Code #endif #include "c.h" a.h #include "c.h" b.h #include "a.h" #include "b.h" main.c 39 von 75

39 Mehrfache Übersetzung/Includes verhindern Dateikennung ist ein Kürzel, das in der Regel aus dem Dateinamen zusammengesetzt wird Aus Dateinamen wie "meinedatei.h" wird zum Beispiel eine Dateikennung wie "MEINEDATEI_H" #ifndef MEINEDATEI_H #define MEINEDATEI_H // Code #endif 40 von 75

40 Mehrfache Übersetzung/Includes verhindern #include "meinedatei.h" #include "meinedatei.h" int main (void) { //... } #ifndef MEINEDATEI_H #define MEINEDATEI_H // Code #endif #ifndef MEINEDATEI_H #define MEINEDATEI_H // Code #endif int main (void) { //... } 41 von 75

41 Selektieren von Debugging-Code Einfache Möglichkeit, zusätzlichen Code zur Fehlersuche mit in den Quelltext aufzunehmen, um ihn je nach Bedarf mit übersetzen zu lassen oder nicht Anweisungen werden nur in den übersetzten Code übernommen, wenn die Konstante beim Präprozessorlauf definiert ist Die Konstante kann dann am Anfang des Programmcodes oder über eine Option beim Compileraufruf definiert werden Beim gcc: -Dname bzw. -Dname=wert Oder in den Projektoptionen der IDE 42 von 75

42 Selektieren von Debugging-Code Erkennung ob Debug Code aktiviert werden soll mittels DEBUG Lässt man oft in der Quelle für spätere Fehlersuche stehen #ifdef DEBUG printf("initialisierung abgeschlossen.\n"); #endif 43 von 75

43 Plattformabhängigkeiten Quelltext für mehrere Prozessoren, Betriebssysteme, graphische Oberflächen o.ä. gleichzeitig zur Verfügung stellen #ifdef GCC /* systemspezifischer Code für GNU-Compiler */ #endif #ifdef sun /* systemspezifischer Code für Sun-Compiler */ #endif #ifdef _MSC_VER /* systemspezifischer Code für Visual-Studio */ #endif 44 von 75

44 Modulare Programmierung 45 von 75

45 Ziele Modulare Programmierung Gleichzeitige Bearbeitung/Entwicklung durch mehrere Entwickler Kürzere Einarbeitungszeit von neuen Entwicklern Nach Änderungen müssen nur Teile eines Projekts neu übersetzt werden Teile eines Projekts können in anderen Programmiersprachen geschrieben werden Klare Strukturierung des gesamten Programms Verbesserung der Wiederverwendbarkeit Gute Modularisierung ist der Schlüssel für erfolgreiche Projekte. Ohne Modularisierung droht jedes Projekt früher oder später an der Komplexität zu scheitern. 46 von 75

46 Prinzipien der Modularisierung Geringe Vernetzung (wenig Schnittstellen) Schwache Kopplung zwischen Modulen (schmale Schnittstellen) Hohe Kohäsion innerhalb Modul (inhaltliche Einheit) Explizite Schnittstellen (Kommunikation mit Parameterübergabe) Information Hiding (Verstecken der Implementationsdetails) 47 von 75

47 Zwei Stufen der Modularisierung in C 1. Stufe: Lediglich die Quellen werden modular strukturiert Die für andere Quellen verwendbare Funktionen werden in Header Files als Prototypen definiert Für die Verwendung dieser Quellen wird in andern Quellen lediglich dieses Header File included Alle benötigten Quellen werden dann vom Compiler/Linker zu einem fertigen Programm (EXE) zusammen gefügt: "statische Bibliotheken". 2. Stufe: Zusätzlich werden die Laufzeiteinheiten modularisiert Aus den Bibliotheken werden DLLs erzeugt Diese DLLs werden dann zur Laufzeit vom Lader automatisch (nach-)geladen als sog. "dynamische Bibliotheken". 48 von 75

48 Statische Bibliotheken 49 von 75

49 Source- und Headerfiles Die Deklarationen werden in Header Files durchgeführt Sie enthalten die Prototypen der "von aussen sichtbaren" Funktionen Header Files sind Deklarationsdateien die sowohl ins definierende als auch ins aufrufende Modul eingebunden werden Header Files sind somit die Schnittstellenbeschreibung der Module Diese Header-Datei wird so abgelegt, dass der Präprozessor (mittels #include) sie findet #ifndef a_h a.h #include "a.h" #include "a.h" a.c b.c 50 von 75

50 Source- und Headerfiles Soll in einem anderen Modul die Funktion globalfunct verwendet werden, muss diese dort mit Hilfe eines prototypen deklariert werden Dasselbe gilt für die globale Variable globalvar auch sie muss im anderen Modul vor der ersten Verwendung deklariert werden Bei Funktionen einfach der Prototyp der Funktion im Header File void foo(); /* Deklaration */ Bei Variablen wird zusätzlich das Schlüsselwort extern verwendet extern int globalvar; /* Deklaration */ 51 von 75

51 Source- und Headerfiles /* --- Deklaration A */ /* Datei: modul_a.h */ #ifndef MODUL_A_H #define MODUL_A_H extern int globalvar; /* fuer alle */ int globalfunct(int a); /* fuer alle */ #endif 52 von 75

52 Source- und Headerfiles /* --- Modul A */ #include "modul_a.h" /* Definitionen */ int globalfunct(int a) {... } /* fuer alle */ static int lokalfunct(int a) {... } /* nur hier */ int globalvar = 24; /* fuer alle */ static int localvar; /* nur hier */ 53 von 75

53 Source- und Headerfiles /* --- Modul B */ #include "modul_a.h" /* Aufruf der Funktion aus Modul A */ int result = globalfunct(42); /* Zugriff auf die Variable aus Modul A */ int var = globalvar; 54 von 75

54 Sichtbarkeit von Funktionen Funktionen können nur auf der äussersten Ebene eines Moduls definiert werden Standardmässig gilt eine Funktion als global das bedeutet, dass ihr Name an den Linker weitergegeben wird Eine Einschränkung der Sichtbarkeit auf das aktuelle Modul ist mit Hilfe des Schlüsselworts static möglich int globalfunct(int a) {... } /* fuer alle */ static int lokalfunct(int a) {... } /* nur hier */ 55 von 75

55 Sichtbarkeit von Variablen Standardmässig sind alle Variablen global, die auf der äussersten Ebene definiert werden Eine Einschränkung der Sichtbarkeit ist ebenfalls mit Hilfe des Schlüsselworts static möglich int globalvar; // fuer alle static int localvar; // nur hier Lokal ist hier nicht im Sinne von lokal in einer Funktion sondern im Sinne von lokal in einem Modul (Dateiebene) gemeint 56 von 75

56 Dynamische Bibliotheken 57 von 75

57 Dynamische Bibliotheken Dynamische Bibliotheken müssen speziell erzeugt werden unter Windows mit der Endung DLL Betriebssystem selber besteht aus einer Sammlung von DLLs Sie stellen dem Linker (über Libs) die Funktionen zur Verfügung, Es wird nicht die Funktion sondern lediglich ein Vermerk (Referenz) gespeichert Der Lader löst die Referenz dynamisch auf und lädt die benötigten DLLs nach Suchpfad für die DLLs ist aktuelles Verzeichnis und zusätzlich alle in der "PATH" Umgebungsvariablen vermerkte Dependency Walker zur Anzeige Dependency Walker zur Anzeige der Abhängigkeiten der Abhängigkeiten 58 von 75

58 Export mit declspec(dllexport) Exportierte Funktionen müssen speziell gekennzeichnet werden #define DLL_EXPORT declspec(dllexport) Von andern Modulen importierte ensprechend #define DLL_EXPORT declspec(dllimport) Die Aufrufkonvention muss cdecl sein Am einfachsten mit einem Define (z.b. _DLL), das man über das Projekt setzt #ifdef _DLL // If accessing the data from inside the DLL #define DLL_EXPORT declspec(dllexport) #else // If accessing the data from outside the DLL #define DLL_EXPORT declspec(dllimport) #endif cdecl void DLL_EXPORT foo(void); Die exportierten Funktionen sind im LIB File gespeichert 59 von 75

59 Übersetzung im Überblick Compilierung der Bibliothek und Klient und Ausführen DynLib.h #include #include Compiler Namen Namen der der DLL DLL vermerkt vermerkt DynLib.dll DynLib.c Beim Compilieren Beim Compilieren wird das h File Beim wird das h File Beim Linken Linken wird wird included das included das lib lib File File gebunden gebunden DynLib.lib Beim Beim Laden Laden wird wird die die referenzierte referenzierte DLL DLL (mit-)geladen (mit-)geladen Lader TestClient.c Compiler TestClient.exe 60 von 75

60 DynLib.h #ifndef DYNLIB1_H #define DYNLIB1_H #ifdef _DLL // If accessing the data from inside the DLL #define DLL_EXPORT declspec(dllexport) #else // If accessing the data from outside the DLL #define DLL_EXPORT declspec(dllimport) #endif #ifdef cplusplus extern "C" { #endif void cdecl DLL_EXPORT foo(void); #ifdef } #endif cplusplus #endif /* DYNLIB1_H */ 61 von 75

61 DynLib.c und TestClient.exe Implementation der Library #include "DynLib1.h" #include <stdio.h> void cdecl foo() { printf("hello World\n"); } Und Aufruf von foo() in TestClient (separates EXE) #include <stdio.h> #include <stdlib.h> #include "DynLib1.h" int main(int argc, char** argv) { foo(); return (EXIT_SUCCESS); } 62 von 75

62 Weiterer Vorteil von dynamischen Bibliotheken C-Bibliotheken lassen sich von praktisch jeder Programmiersprache aus aufrufen Z.B. können GUIs mit Java (oder C#) entwickelt werden einfacher plattformunabhängig sehr gute Werkzeuge vorhanden (sog. GUI Builder) Der Aufruf der C Bibliotheksfunktion in Java dann via JNI oder JNA (später) 63 von 75

63 Noch Fragen? 64 von 75

64 make-utility 65 von 75

65 Das make-utility Jedes etwas grössere Programm setzt sich aus einer ganzen Reihe von Dateien zusammen Schon bei Veränderungen einer Datei kann es nötig sein, mehrere Module neu zu übersetzen Wird z.b. ein Header-File verändert, so sollten alle Quelltextfiles, die dieses Header-File einbinden, neu übersetzt werden Bei grossen Projekten kann das schnell sehr unübersichtlich werden 66 von 75

66 Das make-utility Das Utility make hilft dabei, ein Programm aus mehreren Modulen unter Berücksichtigung der Abhängigkeiten zu erstellen Hinweis: Das frei verfügbare und im Funktionsumfang bedeutend erweiterte GNU-Make trägt meist den Namen gmake Beim Aufruf arbeitet make die Regeln einer im aktuellen Verzeichnis liegenden Makefile-Datei ab 67 von 75

67 Makefile Ein Makefile enthält die Regeln, wann, was und wie es auszuführen ist Es besteht aus: Kommentaren, beginnend mit # Direktiven Variablendefinitionen Expliziten Regeln 68 von 75

68 Makefile Eine Regel ist wie folgt aufgebaut: Target: Was zu erstellen ist target: dependencies <TAB> command Dependencies: Legen fest, wann das zu geschehen hat, nämlich wenn eines von ihnen jünger ist als target Command: Das oder die abzuarbeitenden Kommandos; wichtig ist der Tabulator am Zeilenanfang Da als dependencies auch andere targets angegeben werden können ist eine Verschachtelung der Regeln möglich 69 von 75

69 Makefile Beispiel Das Programm rechner wird aus den Modulen main.o, add.o, sub.o, mul.o sowie div.o gebildet Alle Quelltextfiles nutzen das gemeinsame Headerfile def.h Nach Änderungen an def.h sollten also auch alle Quelltextfiles neu übersetzt werden. 70 von 75

70 Makefile Beispiel # Ausschliesslich explizite Regeln # # rechner wird aus den Objektfiles (.o) zusammengebaut: rechner: add.o sub.o mul.o div.o main.o cc -o rechner add.o sub.o mul.o div.o main.o # Objektfiles loeschen clean: rm -f *.o rechner Forts von 75

71 Makefile Beispiel # Und so entstehen die.o-files (def.h sowie Makefile # werden angegeben, um auch bei Veraenderungen daran # die Übersetzung zu starten): add.o: add.c def.h Makefile cc -c add.c sub.o: sub.c def.h Makefile cc -c sub.c mul.o: mul.c def.h Makefile cc -c mul.c div.o: div.c def.h Makefile cc -c div.c 72 von 75

72 Makefile Beispiel Mit Hilfe von Variablen lassen sich Regeln einfacher ändern (vor allem, wenn sie an mehreren Stellen benötigt werden) Beim Aufruf von make lassen sich auch Variablenzuweisungen übergeben diese haben höhere Priorität als die Festlegungen im Makefile Man muss nicht alle Regeln und Variablen angeben make verwendet dann seine Voreinstellungen 73 von 75

73 Makefile Beispiel # Variante mit Variablen, impliziten Regeln und # gmake's Pattern-Regeln OBJS = add.o sub.o mul.o div.o main.o CC = gcc CFLAGS = -g rechner: $(OBJS) $(CC) $(CFLAGS) -o rechner $(OBJS) clean: rm -f *~ *.o rechner $(OBJS): %.o: %.c def.h Makefile $(CC) $(CFLAGS) -c $< -o $@ Inference Rule: xyz.o depends on xyz.c, def.h and Makefile The source file of the current dependency Full name of the current target 74 von 75

74 Anhang: Calling Convention und Name Decoration Der Name wird anhand der Aufrufkonvention "dekoriert" 75 von 75

Ü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

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

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

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

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

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

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

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

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

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

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

Organisatorisches. Übungsleiter: Karsten Otto Homepage: Aufgaben

Organisatorisches. Übungsleiter: Karsten Otto Homepage:  Aufgaben Organisatorisches Übungsleiter: Karsten Otto (otto@inf.fu-berlin.de) Homepage: http://www.inf.fu-berlin.de/lehre/ss04/sysi/ Aufgaben Montags im Netz Vorbesprechung Dienstag/Mittwoch in den Übungen Abgabe

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

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

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

Programmierkurs C++ Kapitel 6 Module Seite 1

Programmierkurs C++ Kapitel 6 Module Seite 1 Programmierkurs C++ Kapitel 6 Module Seite 1 (Quell-)Module Unter einem Modul versteht man einen Teil des Programms, der eigenständig übersetzt werden kann. In der Syntax der Programmiersprachen werden

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

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

C++ Kurs Teil 1. Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen

C++ Kurs Teil 1. Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen C++ Kurs Teil 1 "hello world" Vergleich von C++ und Java Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen C++ Spezialitäten Schlüsselwort 'const', Copy Constructor,

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

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

Compilieren und Linken von C- und C++-Dateien

Compilieren und Linken von C- und C++-Dateien Compilieren und Linken von C- und C++-Dateien 1999-2011 Dipl.Phys. Gerald Kempfer Lehrbeauftragter / Gastdozent an der Beuth Hochschule für Technik-Berlin Internet: public.beuth-hochschule.de/~kempfer

Mehr

Nuetzlicher Kleinkram

Nuetzlicher Kleinkram Ein paar Hilfestellungen zur Arbeit unter Linux/Unix FB Physik Freie Universität Berlin Computerphysik WS 2007/2008 1 2 3 user@ host :~ > gcc -o programm quelltext. c macht gleich mehrere Dinge auf einmal

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

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

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

Vorlesung Informatik II

Vorlesung Informatik II Vorlesung Informatik II Universität Augsburg Wintersemester 2011/2012 Prof. Dr. Bernhard Bauer Folien von: Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 02. JAVA: Erstes Programm 1 Das erste Java-Programm

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

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

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

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 11 Dynamische Feldvereinbarung... 11-2 11.1 Dynamische Vereinbarung von Vektoren... 11-3 11.2 Dynamische Vereinbarung von Matrizen... 11-5 11.3 Die Kommandozeile... 11-8 Propädeutikum 11-1/8 11

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

Deklarationen in C. Prof. Dr. Margarita Esponda

Deklarationen in C. Prof. Dr. Margarita Esponda Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.

Mehr

Prüfungsvorleistung Datenstrukturen

Prüfungsvorleistung Datenstrukturen Prüfungsvorleistung Datenstrukturen Allgemeine Hinweise Als Prüfungsvorleistung für die Klausur Datenstrukturen müssen Hausaufgaben gelöst werden. Jede Hausaufgabe wird mit einer bestimmten Anzahl an Punkten

Mehr

Berichte aus der Informatik. Dieter Pawelczak. Start in die C-Programmierung

Berichte aus der Informatik. Dieter Pawelczak. Start in die C-Programmierung Berichte aus der Informatik Dieter Pawelczak Start in die C-Programmierung Shaker Verlag Aachen 2012 Inhaltsverzeichnis Inhaltsverzeichnis i 1 Einleitung 1 1.1 Umfeld und Aufbau des Buches 1 Die Programmiersprache

Mehr

Globale Variablen Diverses. Globale Variablen. Globale Variablen

Globale Variablen Diverses. Globale Variablen. Globale Variablen lokale Variablen Variablen bisher nur am Anfang von Funktionen auch erlaubt: am Anfang innerer Codeblöcke (innerhalb geschweifter Klammern) in C99 und als gcc-erweiterung: an beliebiger Stelle innerhalb

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

C++ - Variablen: Gültigkeit - Sichtbarkeit

C++ - Variablen: Gültigkeit - Sichtbarkeit C++ - Variablen: Gültigkeit - Sichtbarkeit Reiner Nitsch 8417 r.nitsch@fbi.h-da.de Attribute von Variablen und Funktionen Attribute von Variablen sind Name (name), Typ (type), Wert (value) Attribute von

Mehr

Konzepte von Betriebssystem-Komponenten. Programmstart & dynamische Bibliotheken SS 05. Wladislaw Eckhardt.

Konzepte von Betriebssystem-Komponenten. Programmstart & dynamische Bibliotheken SS 05. Wladislaw Eckhardt. Proseminar KVBK Programmstart dynamische Bibliotheken Konzepte von Betriebssystem-Komponenten Programmstart & dynamische Bibliotheken SS 05 Wladislaw Eckhardt Wladi23@gmx.net 1 1 Einleitung 1.1 Problematik

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

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 Der Anfänger sollte nicht entmutigt sein, wenn er nicht die Voraussetzungen besitzt, um die Voraussetzungen zu verstehen...

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

Repetitorium Informatik (Java)

Repetitorium Informatik (Java) Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen

Mehr

C++ Klassen, Vererbung. Philipp Lucas. Sebastian Hack. Wintersemester 2008/09. saarland.

C++ Klassen, Vererbung. Philipp Lucas. Sebastian Hack. Wintersemester 2008/09. saarland. C++ Klassen, Vererbung Philipp Lucas phlucas@cs.uni-sb.de Sebastian Hack hack@cs.uni-sb.de Wintersemester 2008/09 saarland university computer science 1 Inhalt Klassen in C++ Sichtbarkeit Erzeugen von

Mehr

Erste Schritte der Programmierung in C

Erste Schritte der Programmierung in C Erste Schritte der Programmierung in C C versus C++ Anatomie von C-Programmen für AVR- Mikrocontroller Unterschiede zwischen C++ und C 1 Grundlegende Unterschiede File-Extensions (Header und Quellcode)

Mehr

Inhaltsverzeichnis Ubersetzung und Pr aprozessor

Inhaltsverzeichnis Ubersetzung und Pr aprozessor Inhaltsverzeichnis 4 Übersetzung und Präprozessor 2 4.1 Phasen der Übersetzung........................... 2 4.1.1 Die Präprozessorphase....................... 2 4.1.2 Die Kompilierungsphase......................

Mehr

Linux Prinzipien und Programmierung

Linux Prinzipien und Programmierung Linux Prinzipien und Programmierung Dr. Klaus Höppner Hochschule Darmstadt Wintersemester 2011/2012 1 / 22 popen Programmentwicklung unter Linux make gcc, objdump, readelf 2 / 22 Die Funktion popen Im

Mehr

Eine Einführung in C-Funktionen

Eine Einführung in C-Funktionen Eine Einführung in C-Funktionen CGK-Proseminar 2014 Philip Gawehn 04.07.2014, Hamburg Inhaltsverzeichnis 1 Einleitung 2 2 Grundlagen 2 2.1 Der Aufbau einer Funktion....................... 2 2.2 Schlüsselwörter.............................

Mehr

ATM18-Projekt Arbeiten mit CodeVisionAVR C-Compiler Teil 02 - Aufbau eines C-Projektes

ATM18-Projekt Arbeiten mit CodeVisionAVR C-Compiler Teil 02 - Aufbau eines C-Projektes Teil 01 - Einführung 1 Eine Einführung in C 1.1 Warum C? 1.2 Wie entstand C? 1.3 Der AVR-Mikrocontroller in einem eingebetteten System 1.4 1.5 Editieren von Quell-Dateien 2 Was ist ein C-Projekt? 2.1 Erzeugen

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

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 4

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 4 Fakultät Verkehrswissenschaften Friedrich List, Professur für Verkehrsbetriebslehre und Logistik Modul Entscheidungsunterstützung in der Logistik Einführung in die Programmierung mit C++ Übung 4 SS 2016

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

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

Objektorientierung: Klassen und Objekte

Objektorientierung: Klassen und Objekte Objektorientierung: Klassen und Objekte Klasse: Beschreibung für eine Menge von Objekten Schablone, Bauplan abstrakte Form Objekt: Instanz einer Klasse konkreter Inhalt (Werte) Klassen bestehen aus Attributen

Mehr

Microcontroller Praktikum SS2010 Dipl. Ing. R. Reisch

Microcontroller Praktikum SS2010 Dipl. Ing. R. Reisch Microcontroller Praktikum SS2010 Dipl. Ing. R. Reisch Die wichtigsten Unterlagen/Tools Für das Praktikum Unterlagen/Kenntnisse/Tools wichtig: Datenblatt des AT80USB1287 µc Schaltplan des im Praktikum verwendeten

Mehr

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Einführung in den Einsatz von Objekt-Orientierung mit C++ I Einführung in den Einsatz von Objekt-Orientierung mit C++ I ADV-Seminar Leiter: Mag. Michael Hahsler Syntax von C++ Grundlagen Übersetzung Formale Syntaxüberprüfung Ausgabe/Eingabe Funktion main() Variablen

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

Agenda. Informatik I WS05/06 Folien von Tobias Dezulian

Agenda. Informatik I WS05/06 Folien von Tobias Dezulian 15.12.2005 Agenda Geltungsbereich (Scope) von Variablen Blöcke Der Call-Stack Einschub: Debugging unter Eclipse Der Heap Lebensdauer von Objekten Müllabfuhr: Garbage Collection Exceptions Geltungsbereich

Mehr

Java: Eine kurze Einführung an Beispielen

Java: Eine kurze Einführung an Beispielen Java: Eine kurze Einführung an Beispielen Quellcode, javac und die JVM Der Quellcode eines einfachen Java-Programms besteht aus einer Datei mit dem Suffix.java. In einer solchen Datei wird eine Klasse

Mehr

Praktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10. computer graphics & visualization

Praktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10. computer graphics & visualization Praktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10 Übersicht In den ersten Wochen: Einführung in objektorientierte Programmierung mit C++ Anschließend: Einführung in die programmierbare

Mehr

Bakefiles. TgZero Technik.Blosbasis.net. April 1, 2013

Bakefiles. TgZero Technik.Blosbasis.net. April 1, 2013 TgZero Technik.Blosbasis.net April 1, 2013 1 Inhaltsverzeichnis 1 Makefile 3 1.1 Was sind Makefiles?........................ 3 2 Bakefile 3 3 Aufbau einer Bakefile 4 3.1 Targets...............................

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

Ü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

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes Variablen Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes v ist Stück im Speicher, der 4 Bytes lang ist Speicherzugriff? Über Adressen!

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

- dynamisches Laden -

- dynamisches Laden - - - Fachbereich Technik Department Elektrotechnik und Informatik 21. Juni 2012 1/23 2/23 s dynamisch Code kann von mehreren Programmen genutzt werden => kleinere Programme einzelne Teile eines Programms

Mehr

Speicherklassen (1) Lokale Variablen

Speicherklassen (1) Lokale Variablen Speicherklassen (1) Lokale Variablen Lokale Variablen beschränken sich auf die Funktionen, in denen sie definiert werden Sind in der Funktion gekapselt können also nur in der Funktion verändert werden

Mehr

javascript Coding-Guidelines 2. Ausgabe Februar 2015 Der Guideline beschreibt den verwendeten Coding-Stil von javascript als eigene Richtline.

javascript Coding-Guidelines 2. Ausgabe Februar 2015 Der Guideline beschreibt den verwendeten Coding-Stil von javascript als eigene Richtline. javascript Coding-Guidelines 2. Ausgabe Februar 2015 Der Guideline beschreibt den verwendeten Coding-Stil von javascript als eigene Richtline. Inhalts-Verzeichnis 1. Allgemeine Richtlinien...1 1.1 Anzahl

Mehr

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm Programmiersprachen Einführung in C Teil 2: Prof. Dr. int main (int argc, char *argv[]) int sum = 0; for (i = 0; i

Mehr

Shell-Scripting Linux-Kurs der Unix-AG

Shell-Scripting Linux-Kurs der Unix-AG Shell-Scripting Linux-Kurs der Unix-AG Andreas Teuchert 8. Juli 2014 Was ist ein Shell-Script? Aneinanderreihung von Befehlen, die ausgeführt werden Bedingte und wiederholende Ausführung möglich Nützlich

Mehr

Funktionen in JavaScript

Funktionen in JavaScript Funktionen in JavaScript Eine Funktion enthält gebündelten Code, der sich in dieser Form wiederverwenden lässt. Mithilfe von Funktionen kann man denselben Code von mehreren Stellen des Programms aus aufrufen.

Mehr

Computergrundlagen Programmieren in C

Computergrundlagen Programmieren in C Computergrundlagen Programmieren in C Axel Arnold Institut für Computerphysik Universität Stuttgart Wintersemester 2013/14 Die Sprache C D. M. Ritchie, 1941 2011 Entwickelt 1971-1973 aktueller Standard:

Mehr

10 Die Programmiersprache C99: Zusammenfassung

10 Die Programmiersprache C99: Zusammenfassung 10 Die Programmiersprache C99: Zusammenfassung Jörn Loviscach Versionsstand: 25. September 2014, 18:40 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html

Mehr

Begriffe. Textdatei mit C-Anweisungen, meistens mit der Extension.c (KLEIN!)

Begriffe. Textdatei mit C-Anweisungen, meistens mit der Extension.c (KLEIN!) Begriffe Quellcode, Sourcecode: Befehle einer höheren Programmiersprache z.b. C, C++, Java, Fortran im Klartext, d.h. es handelt sich hier um reine Textdateien. C-Quellcode-Datei: Textdatei mit C-Anweisungen,

Mehr

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 7. Funktionen Einleitung Nach dem Prinzip Divide and Conquer bietet es sich an, größere Aufgaben in kleinere Teile zu unterteilen. Anweisungsblöcke,

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

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14 C++ Teil 6 Sven Groß 27. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 6 27. Mai 2016 1 / 14 Themen der letzten Vorlesung Musterlösung A2 Wdh.: Zeiger und Felder Kopieren von Feldern Dynamische Speicherverwaltung

Mehr

Entwicklung mit mehreren Dateien

Entwicklung mit mehreren Dateien Frühjahrsemester 2011 CS104 Programmieren II Teil II: C++ Programmierung Kapitel 9: Entwicklungsprozess in C++ H. Schuldt Entwicklung mit mehreren Dateien In C++ ist es üblich, den Quelltext in mehreren

Mehr

Grundlagen. Kapitel 1

Grundlagen. Kapitel 1 Grundlagen Dieses Kapitel umfasst grundlegende Fragen und Aufgaben zur Erstellung von C++-Programmen. Hierzu zählen auch das Inkludieren von Header-Dateien Eine Header-Datei beinhaltet Informationen, die

Mehr

Computergrafik 1 Übung, Wintersemester 2011. Eclipse Hands-On. C++ Projektsetup mit OpenGL und GLUT unter Eclipse für Windows 22.10.

Computergrafik 1 Übung, Wintersemester 2011. Eclipse Hands-On. C++ Projektsetup mit OpenGL und GLUT unter Eclipse für Windows 22.10. Computergrafik 1 Übung, Wintersemester 2011 Eclipse Hands-On C++ Projektsetup mit OpenGL und GLUT unter Eclipse für Windows 22.10.12 1 Eclipse - Die IDE 1. Entwicklungsumgebung (IDE) herunterladen / installieren

Mehr

Grundlagen der Informatik - 6. Praktikum

Grundlagen der Informatik - 6. Praktikum Grundlagen der Informatik - 6. Praktikum In diesem Praktikum soll es neben der Anwendung von Funktionsdefinitionen auch um einfache Prinzipien der verteilten Quelltext-Strukturierung gehen. Diese spielt

Mehr

1 Native C Code in C# Umgebung mit Visual Studio 2010

1 Native C Code in C# Umgebung mit Visual Studio 2010 1 Native C Code in C# Umgebung mit Visual Studio 2010 29.07.2013 1.1 Ziel Ein Embedded C Code soll innerhalb einer C# Umgebung lauf- und debuggfähig sein. Der C# Anteil stellt dem Embedded C Code einen

Mehr

Praktikumstermin B-07: make & Makefiles

Praktikumstermin B-07: make & Makefiles Praktikumstermin B-07: make & Makefiles Version 2014-11-26: Problem mit dem Löschbefehl gelöst. Ursache: Auf den Terminalrechnern funkt ein Softwarepaket aus einer anderen Lehrveranstaltung dazwischen

Mehr

Programmierung mit C Zeiger

Programmierung mit C Zeiger Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch

Mehr

Computergrundlagen Programmieren in C

Computergrundlagen Programmieren in C Die Compilersprache C Computergrundlagen Programmieren in C Axel Arnold Institut für Computerphysik Universität Stuttgart Wintersemester 2010/11 Geschichte D. M. Ritchie, *1941 1971-73: Entwickelt von

Mehr

Arrays (Felder/Vektoren)

Arrays (Felder/Vektoren) Arrays (Felder/Vektoren) Zusammenfassung mehrerer Variablen des gleichen Typs unter einem Namen im Speicher direkt hintereinander abgelegt Definition: Typname Arrayname [Größe]; Beispiel: int ar [5]; Zugriff

Mehr

Praktikum 2: Erste C Programme, Kommandozeileneingabe

Praktikum 2: Erste C Programme, Kommandozeileneingabe Praktikum 2: Erste C Programme, Kommandozeileneingabe Ziele Ein weiteres Beispielprogramm testen und verstehen Entwicklungsumgebung für C auf dem Notebook Einführung Nach dem letzten Praktikum sollten

Mehr

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen Klassenvariablen Wir wollen die Zahl der instantiierten Studentenobjekte zählen. Dies ist jedoch keine Eigenschaft eines einzelnen Objektes. Vielmehr gehört die Eigenschaft zu der Gesamtheit aller Studentenobjekte.

Mehr

Die Programmiersprache C Eine Einführung

Die Programmiersprache C Eine Einführung Die Programmiersprache C Eine Einführung Christian Gentsch Fakutltät IV Technische Universität Berlin Projektlabor 2. Mai 2014 Inhaltsverzeichnis 1 Einführung Entstehungsgeschichte Verwendung 2 Objektorientiert

Mehr

GI Vektoren

GI Vektoren Vektoren Problem: Beispiel: viele Variablen vom gleichen Typ abspeichern Text ( = viele char-variablen), Ergebnisse einer Meßreihe ( = viele int-variablen) hierfür: Vektoren ( = Arrays = Feld ) = Ansammlung

Mehr

Bash-Scripting Linux-Kurs der Unix-AG

Bash-Scripting Linux-Kurs der Unix-AG Bash-Scripting Linux-Kurs der Unix-AG Zinching Dang 02. Juli 2013 Was ist ein Bash-Script? Aneinanderreihung von Befehlen, die ausgeführt werden Bedingte und wiederholende Ausführung möglich Nützlich bei

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

Kompaktkurs C-Programmierung

Kompaktkurs C-Programmierung Kompaktkurs C-Programmierung 26. 03. 2007 Franz Schenk Organisatorisches Vorlesung Accountvergabe Skriptverkauf Übungen: zwei Blöcke (13:15-14:45 / 14:45-16:15) Gruppenübung Rechnerübung Klausur Ferien:

Mehr

1.4. Funktionen. Objektorientierte Programmierung mit C++

1.4. Funktionen. Objektorientierte Programmierung mit C++ mehrfache Deklarationen sind erlaubt für jede Funktion muss es (GENAU) eine Definition geben, ansonsten linker error [the one definition rule ODR] Deklarationen in *.h - Files, Definitionen in *.cpp -

Mehr

Informatik I. Übung 2 : Programmieren in Eclipse. 5. März Daniel Hentzen

Informatik I. Übung 2 : Programmieren in Eclipse. 5. März Daniel Hentzen Informatik I Übung 2 : Programmieren in Eclipse 5. März 2014 Daniel Hentzen dhentzen@student.ethz.ch Downloads : http://n.ethz.ch/~dhentzen/download/ Heute 1. Nachbesprechung Übung 1 2. Theorie 3. Vorbesprechung

Mehr

Programmierkurs C++ Grundlagen. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.

Programmierkurs C++ Grundlagen. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck. Programmierkurs C++ Grundlagen Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Algorithmen, Maschinen- und Programmiersprachen Algorithmen

Mehr

Die Programmiersprache C99: Zusammenfassung

Die Programmiersprache C99: Zusammenfassung Die Programmiersprache C99: Zusammenfassung Jörn Loviscach Versionsstand: 7. Dezember 2010, 19:30 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung. Videos dazu: http://www.youtube.com/joernloviscach

Mehr

C für Java-Programmierer

C für Java-Programmierer Carsten Vogt C für Java-Programmierer ISBN-10: 3-446-40797-9 ISBN-13: 978-3-446-40797-8 Inhaltsverzeichnis Weitere Informationen oder Bestellungen unter http://www.hanser.de/978-3-446-40797-8 sowie im

Mehr

Inhaltsverzeichnis. Grundbegriffe der C-Programmierung Für den HI-TECH C-Compiler

Inhaltsverzeichnis. Grundbegriffe der C-Programmierung Für den HI-TECH C-Compiler Inhaltsverzeichnis Grundbegriffe der C-Programmierung 1. Grundsätzliches... 2 1.1 Darstellung von Werten... 2 1.1.1 Dezimale Zahlendarstellung... 2 1.1.2 Binäre Zahlendarstellung... 3 1.1.3 Hexadezimale

Mehr

Übung 1 - Betriebssysteme I

Übung 1 - Betriebssysteme I Prof. Dr. Th. Letschert FB MNI 13. März 2002 Aufgabe 0: Basiswissen Rechnerarchitektur: Übung 1 - Betriebssysteme I Aus welchen Komponenten besteht ein Rechner mit Von-Neumann Architektur? Was sind Bits

Mehr