Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel,...
-
Upload
philo-geier -
Category
Documents
-
view
103 -
download
0
Transcript of Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel,...
![Page 1: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/1.jpg)
Programmieren in C
Grundlagen C 5
Hochschule Fulda – FB AI
Sommersemester 2014
http://c-ai.rz.hs-fulda.de
Peter Klingebiel, HS Fulda, DVZ
![Page 2: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/2.jpg)
Programmieren in C - 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
![Page 3: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/3.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 3
Speichersegmentierung 2
• Beispiel (Sun Solaris)
![Page 4: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/4.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 4
Speichersegmentierung 3
• Diskussion– Warum? Welche Vorteile hat das?
![Page 5: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/5.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 5
Speichersegmentierung 4
• Beispiel: segment.c
![Page 6: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/6.jpg)
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– Sichtbarkeit global– static Sichtbarkeit im Quelldateikontext
• Variablen können innerhalb von Blöcken, d.h. lokal oder automatisch definiert werden
![Page 7: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/7.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 7
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!
![Page 8: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/8.jpg)
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
![Page 9: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/9.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 9
Lebensdauer 2
• Beispiel: lifetime.c
![Page 10: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/10.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 10
Lebensdauer 3
• Diskussion– Welche Ausgaben erzeugt lifetime?
![Page 11: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/11.jpg)
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
![Page 12: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/12.jpg)
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
![Page 13: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/13.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 13
Sichtbarkeit 3
• Beispiel: 2 Module / Quelldateien
![Page 14: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/14.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 14
Sichtbarkeit 4
• Beispiel: scope.c
![Page 15: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/15.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 15
Sichtbarkeit 5
• Diskussion– Welche Ausgaben erzeugt scope?
![Page 16: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/16.jpg)
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
![Page 17: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/17.jpg)
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
![Page 18: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/18.jpg)
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
![Page 19: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/19.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 19
C-Preprozessor 4
• Beispiel: myincl.hputs("hallo");
• mydemo.cint main(void){#include "myincl.h" }
• nach CPP-Lauf:int main(void){puts("hallo");}
![Page 20: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/20.jpg)
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
![Page 21: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/21.jpg)
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;}
![Page 22: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/22.jpg)
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)
• Quelltextint i = 2, j = 3, m;m = min(i, j);
• Nach CPP-Lauf:int i = 2, j = 3, m;m = (i < j ? i : j);
![Page 23: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/23.jpg)
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)
![Page 24: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/24.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 24
C-Preprozessor 9
• Beispiel:proc1();#ifdef DEBUGputs("nach proc1");#endifproc2();
• Nach Aufruf von cpp:proc1();proc2();
• Nach Aufruf von cpp –DDEBUG:proc1();puts("nach proc1");proc2();
![Page 25: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/25.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 25
C-Preprozessor 10
• Beispiel: cppdemo.h
![Page 26: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/26.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 26
C-Preprozessor 11
• Beispiel: cppdemo.c
![Page 27: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/27.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 27
C-Preprozessor 12
• Beispiel: Nach CPP-Lauf Sun Solaris
![Page 28: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/28.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 28
C-Preprozessor 13
• Beispiel: Nach CPP-Lauf Windows
![Page 29: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/29.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 29
C-Preprozessor 14
• Diskussion– Sinnvolle Verwendung von CPP?– Verbesserungen?
![Page 30: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/30.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 30
C-Preprozessor 15
• Beispiel: cpptrap.c
![Page 31: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/31.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 31
C-Preprozessor 16
• Beispiel: Nach CPP-Lauf Nebeneffekte!!
![Page 32: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/32.jpg)
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
![Page 33: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/33.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 33
C-Preprozessor 18
• Grafikdatei draw.txt
![Page 34: Programmieren in C Grundlagen C 5 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ.](https://reader034.fdokument.com/reader034/viewer/2022051819/55204d8149795902118d4654/html5/thumbnails/34.jpg)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 34
C-Preprozessor 19
• Grafikausgabe draw.svgnach Aufruf von cpp –P draw.txt draw.svg