Globale Variablen Diverses

Globale Variablen

Globale Variablen

Globale Variablen Diverses

Wdh: Variablen in Funktionen Globale Variablen

lokale Variablen

Variablen bisher nur am Anfang von Funktionen auch erlaubt: am Anfang innerer Codebl¨ ocke (innerhalb geschweifter Klammern) in C99 und als gcc-Erweiterung: an beliebiger Stelle innerhalb einer Funktion

Globale Variablen

Globale Variablen Diverses

Wdh: Variablen in Funktionen Globale Variablen

Sichtbarkeit und Lebensdauer von lokalen Variablen

lokale Variablen k¨ onnen benutzt werden von Punkt ihrer Deklaration an bis zum Ende des Blocks, in dem sie deklariert wurden lokale Variablen existieren, bis der Block, in dem sie deklariert wurden, verlassen wird im Falle eines rekursiven Funktionsaufrufes existieren sie mehrmals, nur die aktuell g¨ ultigen k¨ onnen ver¨andert werden

Globale Variablen

Globale Variablen Diverses

Wdh: Variablen in Funktionen Globale Variablen

so nicht!

int *somevector( void ) { int v[10]; /* irgendwas mit v */ return v;

/* falsch! */

} Nach dem Verlassen der Funktion ist der f¨ ur v angelegte Speicher wieder freigegeben und wird anderweitig benutzt. Hier muss malloc o.¨a. verwendet werden.

Globale Variablen

Globale Variablen Diverses

Wdh: Variablen in Funktionen Globale Variablen

Globale Variablen

Variablen k¨onnen auch außerhalb von Funktionen (deshalb auch: externe Variablen) deklariert werden. F¨ ur diese gilt: Sie sind global sichtbar (in jeder Funktion sichtbar, sofern dort nicht eine Variable mit demselben Namen deklariert wird, wodurch die globale Variable u ¨berdeckt wird) Sie existieren w¨ahrend des gesamten Programmablaufes genau einmal falls keine andere Definition stattfindet, erhalten sie den Anfangswert Null

Globale Variablen

Globale Variablen Diverses

Wdh: Variablen in Funktionen Globale Variablen

Gegen¨uberstellung /* lokal */ void inc(int *c) { (*c)++; } int main( void ) { int a=0; ... inc(&a); ... }

/* global */ int a; void inc(void) { a++; } int main(void) { ... inc(); ... } Globale Variablen

Globale Variablen Diverses

Wdh: Variablen in Funktionen Globale Variablen

Gegen¨uberstellung /* lokal */ void inc(int *c) { (*c)++; } int main( void ) { int a=0; ... inc(&a); ... }

/* global */ int a; void inc(void) { a++; } int main(void) { ... inc(); ... } Globale Variablen

Globale Variablen Diverses

Wdh: Variablen in Funktionen Globale Variablen

Globale Sichtbarkeit - Segen und Fluch

, Globale Variablen vereinfachen Funktionsaufrufe, da sie dort nicht mit angegeben werden m¨ ussen. / Andrerseits wird der Datenfluss verdeckt, da man dem Funktionsaufruf nicht mehr ansieht, dass ein Wert ver¨andert werden kann. / Zudem sind Funktionen, die mit globalen Variablen arbeiten, weniger flexibel. Globale Variablen sollten sparsam eingesetzt werden. Sinnvoll sind sie vor allem f¨ ur Daten, mit denen das ganze Programm arbeiten muss.

Globale Variablen

Globale Variablen Diverses

Wdh: Variablen in Funktionen Globale Variablen

Statische Variablen Einen Kompromiss stellen statische Variablen dar. Sie werden innerhalb einer Funktion mit dem Schl¨ usselwort static definiert. Ihre Sichtbarkeit ist wie die von lokalen Variablen, ihre Lebensdauer und Initialisierung wie die von globalen Variablen. Eine Funktion, die zur¨ uckgibt, wie oft sie aufgerufen wurde: /* global */

/* statisch */

int counter;

int count( void ) { static int counter; return ++counter; }

int count( void ) { return ++counter; }

Globale Variablen

Globale Variablen Diverses

Wdh: Variablen in Funktionen Globale Variablen

Statische Variablen Einen Kompromiss stellen statische Variablen dar. Sie werden innerhalb einer Funktion mit dem Schl¨ usselwort static definiert. Ihre Sichtbarkeit ist wie die von lokalen Variablen, ihre Lebensdauer und Initialisierung wie die von globalen Variablen. Eine Funktion, die zur¨ uckgibt, wie oft sie aufgerufen wurde: /* global */

/* statisch */

int counter;

int count( void ) { static int counter; return ++counter; }

int count( void ) { return ++counter; }

Globale Variablen

Globale Variablen Diverses

Wdh: Variablen in Funktionen Globale Variablen

Statische Variablen Einen Kompromiss stellen statische Variablen dar. Sie werden innerhalb einer Funktion mit dem Schl¨ usselwort static definiert. Ihre Sichtbarkeit ist wie die von lokalen Variablen, ihre Lebensdauer und Initialisierung wie die von globalen Variablen. Eine Funktion, die zur¨ uckgibt, wie oft sie aufgerufen wurde: /* global */

/* statisch */

int counter;

int count( void ) { static int counter; return ++counter; }

int count( void ) { return ++counter; }

Globale Variablen

Globale Variablen Diverses

Makros als Konstanten Leere Anweisung

Konstanten

Anstatt eine Zahl mehrere Male im Programm stehen zu haben, ist es sinnvoller, daf¨ ur einmal eine Konstante zu definieren. Eine M¨ oglichkeit daf¨ ur sind Makros. #define SIZE 10 int a[10]; ... for(i=0; i