Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Wintersemester 2013/14 Peter Klingebiel, HS Fulda, DVZ."—  Präsentation transkript:

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

2 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ2 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

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

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

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

6 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ6 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 –Sichtbarkeit global –static Sichtbarkeit im Quelldateikontext Variablen können innerhalb von Blöcken, d.h. lokal oder automatisch definiert werden

7 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ7 Speicherklassen 2 auto –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!

8 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ8 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

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

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

11 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ11 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

12 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ12 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

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

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

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

16 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ16 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

17 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ17 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

18 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ18 C-Preprozessor 3 Syntax: #include #include "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

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

20 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ20 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

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

22 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ22 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);

23 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ23 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)

24 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ24 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();

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

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

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

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

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

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

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

32 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ32 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

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

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


Herunterladen ppt "Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Wintersemester 2013/14 Peter Klingebiel, HS Fulda, DVZ."

Ähnliche Präsentationen


Google-Anzeigen