programmieren in c grundlagen c 5
Download
Skip this Video
Download Presentation
Programmieren in C Grundlagen C 5

Loading in 2 Seconds...

play fullscreen
1 / 34

Programmieren in C Grundlagen C 5 - PowerPoint PPT Presentation


  • 127 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Programmieren in C Grundlagen C 5' - nyx


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
programmieren in c grundlagen c 5

Programmieren in CGrundlagen C 5

Hochschule Fulda – FB AI

Wintersemester 2013/14

http://c.rz.hs-fulda.de

Peter Klingebiel, HS Fulda, DVZ

speichersegmentierung 1
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

speichersegmentierung 2
Speichersegmentierung 2
  • Beispiel (Sun Solaris)

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

speichersegmentierung 3
Speichersegmentierung 3
  • Diskussion
    • Warum? Welche Vorteile hat das?

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

speichersegmentierung 4
Speichersegmentierung 4
  • Beispiel: segment.c

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

speicherklassen 1
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

speicherklassen 2
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

lebensdauer 1
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

lebensdauer 2
Lebensdauer 2
  • Beispiel: lifetime.c

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

lebensdauer 3
Lebensdauer 3
  • Diskussion
    • Welche Ausgaben erzeugt lifetime?

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

sichtbarkeit 1
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

sichtbarkeit 2
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

sichtbarkeit 3
Sichtbarkeit 3
  • Beispiel: 2 Module / Quelldateien

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

sichtbarkeit 4
Sichtbarkeit 4
  • Beispiel: scope.c

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

sichtbarkeit 5
Sichtbarkeit 5
  • Diskussion
    • Welche Ausgaben erzeugt scope?

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

c preprozessor 1
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

c preprozessor 2
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

c preprozessor 3
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

c preprozessor 4
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

c preprozessor 5
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

c preprozessor 6
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

c preprozessor 7
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

c preprozessor 8
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

c preprozessor 9
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

c preprozessor 10
C-Preprozessor 10
  • Beispiel: cppdemo.h

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

c preprozessor 11
C-Preprozessor 11
  • Beispiel: cppdemo.c

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

c preprozessor 12
C-Preprozessor 12
  • Beispiel: Nach CPP-Lauf Sun Solaris

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

c preprozessor 13
C-Preprozessor 13
  • Beispiel: Nach CPP-Lauf Windows

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

c preprozessor 14
C-Preprozessor 14
  • Diskussion
    • Sinnvolle Verwendung von CPP?
    • Verbesserungen?

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

c preprozessor 15
C-Preprozessor 15
  • Beispiel: cpptrap.c

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

c preprozessor 16
C-Preprozessor 16
  • Beispiel: Nach CPP-Lauf  Nebeneffekte!!

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

c preprozessor 17
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

c preprozessor 18
C-Preprozessor 18
  • Grafikdatei draw.txt

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

c preprozessor 19
C-Preprozessor 19
  • Grafikausgabe draw.svgnach Aufruf von cpp –P draw.txt draw.svg

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

ad