1 / 34

Programmieren in C Grundlagen C 5

Programmieren in C Grundlagen C 5. Hochschule Fulda – FB AI Wintersemester 2013/14 http://c.rz.hs-fulda.de Peter Klingebiel, HS Fulda, DVZ. Speichersegmentierung 1. Programmcode und Programmdaten eines Programms werden von Betriebssystem in unterschiedliche Speichersegmente geladen

nyx
Download Presentation

Programmieren in C Grundlagen C 5

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programmieren in CGrundlagen C 5 Hochschule Fulda – FB AI Wintersemester 2013/14 http://c.rz.hs-fulda.de 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 • Sichtbarkeit global • static Sichtbarkeit im Quelldateikontext • 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 • 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.hputs("hallo"); • mydemo.cint 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 PI3.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) • Quelltextint 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 DEBUGputs("nach proc1");#endifproc2(); • 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.svgnach Aufruf von cpp –P draw.txt draw.svg Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

More Related