Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Programmieren in C Grundlagen C 5

Ähnliche Präsentationen


Präsentation zum Thema: "Programmieren in C Grundlagen C 5"—  Präsentation transkript:

1 Programmieren in C Grundlagen C 5
Hochschule Fulda – FB AI Wintersemester 2013/14 Peter Klingebiel, HS Fulda, DVZ

2 Speichersegmentierung 1
Programmcode und Programmdaten eines Programms werden von Betriebssystem in unterschiedliche Speichersegmente geladen Programmcode  Textsegment globale / statische Daten  Datensegmente Konstanten initialisierte Daten nicht initialisierte Daten automatische Daten  Stacksegment Daten werden erst bei Eintritt in Block erzeugt Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

3 Speichersegmentierung 2
Beispiel (Sun Solaris) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

4 Speichersegmentierung 3
Diskussion Warum? Welche Vorteile hat das? Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

5 Speichersegmentierung 4
Beispiel: segment.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

6 Speicherklassen 1 Funktionen können nur global, d.h. ausserhalb von Blöcken definiert werden Sichtbarkeit global static  Sichtbarkeit im Quelldateikontext Variablen können ausserhalb von Blöcken, d.h. global definiert werden Variablen können innerhalb von Blöcken, d.h. lokal oder automatisch definiert werden Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

7 Speicherklassen 2 auto static extern register
nur innerhalb eines Blocks, Standardklasse Variable existiert / ist sichtbar nur im Block static in Block: Variable erhält ihren Wert sonst: Variable/Funktion nur in C-Quelle sichtbar extern Variable ist in anderer C-Quelle definiert register Variable  CPU-Register, hat keine Adresse! Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

8 Lebensdauer 1 Lebensdauer einer Variablen ist die Zeit, in der diese Variable Speicherplatz belegt lokale / automatische Variable „lebt“, d.h. hat einen Speicherort vom Anfang bis zum Ende des Blocks, in dem sie definiert ist Speicherplatz wird bei Verlassen des Blocks wieder freigegeben  Variable ist ungültig! Zugriff darauf ist dann undefiniert Globale oder statische Variable „lebt“ vom Anfang bis zum Ende des Programms Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

9 Lebensdauer 2 Beispiel: lifetime.c
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

10 Lebensdauer 3 Diskussion Welche Ausgaben erzeugt lifetime?
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

11 Sichtbarkeit 1 Der Sichtbarkeitsbereich (Scope) einer Variablen  Programmabschnitt, in dem die Variable sichtbar/nutzbar/gültig ist Der Scope wird durch den Ort der Definition bzw. Deklaration der Variablen festgelegt innerhalb eines Blocks  sichtbar von der Stelle der Definition bis zum Blockende ausserhalb  sichtbar von Stelle der Definition bzw. Deklaration bis zum Ende der Quelldatei mit static definierte Variablen sind nur im Modul sichtbar Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

12 Sichtbarkeit 2 Globale Variable müssen ausserhalb von Blöcken definiert sein Variablen aus anderen Modulen (globale Variable) müssen explizit als extern deklariert werden Scope einer Funktion: Bereich auf Ebene des Programms, in der die Funktion nutzbar ist global sollte dann vor Nutzung bekannt sein (Prototype) lokal nur im Modul bei Definition als static Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

13 Sichtbarkeit 3 Beispiel: 2 Module / Quelldateien
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

14 Sichtbarkeit 4 Beispiel: scope.c
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

15 Sichtbarkeit 5 Diskussion Welche Ausgaben erzeugt scope?
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

16 C-Preprozessor 1 C-Preprozessor bearbeitet C-Quelltexte vor dem eigentlichen Compilerlauf reiner textueller Eingriff in den Quelltext CPP hat eigene Syntax # leitet CPP-Anweisungen ein CPP-Anweisungen nicht mit ; terminiert! Wichtige Funktionen von CPP: #include – Dateien einfügen #define – Makros definieren #if / #ifdef – Bedingte Compilierung Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

17 C-Preprozessor 2 #include – fügt den Inhalt anderer Dateien (sog. Headerfiles) in den Quelltext ein Includedateien enthalten i.w. Deklarationen von Funktionen (prototypes) Deklarationen von Datentypen Deklarationen von externen/globalen Variablen Definitionen von Konstanten (const) Definitionen von Konstanten als CPP-Makro Definitionen von CPP-Makros Bedingte Compilierung CPP kann auch autonom verwendet werden Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

18 C-Preprozessor 3 Syntax: #include <filename.h> #include "filename.h" <filename.h> - fügt Headerdatei aus Standardinclude- und Systemverzeichnissen ein, z.B. /usr/include, die i.d.R. mit dem Compiler oder dem System mitgeliefert werden "filename.h" – fügt Headerdatei aus Benutzer-/Projektverzeichnissen ein, z.B. aus dem aktuellen Verzeichnis Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

19 C-Preprozessor 4 Beispiel: myincl.h puts("hallo");
mydemo.c int main(void) { #include "myincl.h" } nach CPP-Lauf: int main(void) { puts("hallo"); } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

20 C-Preprozessor 5 #define – definiert ein Makro  Textersatz #define makroname #define makroname ersatztext #undef makroname Beispiele: #define UNIX - Makroname UNIX kann z.B. bei bedingter Compilierung verwendet werden #define EOF (-1) - Makroname EOF wird durch Ersatztext (-1) ersetzt  wie Konstante Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

21 C-Preprozessor 6 Beispiel: mydefs.h #define PI 3.141
myprog.c #include "mydefs.h" int main(void) { double p = PI; } nach CPP-Lauf: int main(void) { double p = 3.141; } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

22 C-Preprozessor 7 Parametrisierte Makros
Makroparameter werden in Ersatztext ersetzt Beispiel: #define min(a, b) (a < b ? a : b) Quelltext int i = 2, j = 3, m; m = min(i, j); Nach CPP-Lauf: int i = 2, j = 3, m; m = (i < j ? i : j); Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

23 C-Preprozessor 8 Bedingte Compilierung  Verändern des Quelltextes abhängig von CPP-Makros Syntax #if (expr1) #elif (expr2) #else #endif und #ifdef (symbol) #ifndef (symbol) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

24 C-Preprozessor 9 Beispiel: proc1(); #ifdef DEBUG puts("nach proc1"); #endif proc2(); Nach Aufruf von cpp: proc1(); proc2(); Nach Aufruf von cpp –DDEBUG: proc1(); puts("nach proc1"); proc2(); Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

25 C-Preprozessor 10 Beispiel: cppdemo.h
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

26 C-Preprozessor 11 Beispiel: cppdemo.c
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

27 C-Preprozessor 12 Beispiel: Nach CPP-Lauf Sun Solaris
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

28 C-Preprozessor 13 Beispiel: Nach CPP-Lauf Windows
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

29 C-Preprozessor 14 Diskussion Sinnvolle Verwendung von CPP?
Verbesserungen? Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

30 C-Preprozessor 15 Beispiel: cpptrap.c
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

31 C-Preprozessor 16 Beispiel: Nach CPP-Lauf  Nebeneffekte!!
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

32 C-Preprozessor 17 Beispiel: Nutzung von CPP als reiner Text- bzw. Makroprozessor Geht, doch CPP ist dafür nicht vorgesehen, Alternativen sind z.B. m4 u.a. Includefile draw.inc Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

33 C-Preprozessor 18 Grafikdatei draw.txt
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

34 C-Preprozessor 19 Grafikausgabe draw.svg nach Aufruf von cpp –P draw.txt draw.svg Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Herunterladen ppt "Programmieren in C Grundlagen C 5"

Ähnliche Präsentationen


Google-Anzeigen