Programmieren in c grundlagen c 5
This presentation is the property of its rightful owner.
Sponsored Links
1 / 34

Programmieren in C Grundlagen C 5 PowerPoint PPT Presentation


  • 81 Views
  • Uploaded on
  • Presentation posted in: General

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

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.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


  • Login