Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
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
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.