10.6. Terminologischer Rückblick
- Lokale Variablen: Variablen, deren Gültigkeitsbereich auf eine Funktion oder einen Anweisungsblock beschränkt ist. Solche Variablen müssen am Beginn einer Funktion oder eines Anweisungsblocks - gleich nach der öffnenden, geschweiften Klammer -- definiert werden.
- Globale Variablen: Variablen mit potentiell unbegrenztem Gültigkeitsbereich. Sie werden außerhalb von Funktionen definiert, i.a. noch vor main(). Globale Variablen sind ab der Stelle ihrer Definition allen Funktionen im Quellcode abwärts verfügbar. Existieren in einzelnen Funktionen namensgleiche, lokale Variablen, dann sind die entsprechenden globalen Variablen dort nicht ansprechbar. Der Gültigkeitsbereich einer globalen Variablen kann durch das Schlüsselwort static auf die Funktionen der Quelldatei eingeschränkt werden, in der die globale Variable definiert wurde.
- Automatische Datenobjekte: Datenobjekte mit "flüchtigem Charakter", d.h., sie werden beim Eintritt in ihren Gültigkeitsbereich erzeugt und beim Verlassen desselben wieder zerstört. Lokale Variablen gehören per Voreinstellung der Speicherklasse "auto" an. Bei jedem Verlassen einer Funktion gehen alle Daten, die in automatischen Variablen gespeichert wurden, unwiederbringlich verloren.
- Statische Datenobjekte: Sie existieren während der ganzen Laufzeit eines Programms und behalten daher so lange ihren Wert, bis er durch Anweisungen des Programms geändert wird. Globale Variablen sind immer vom Typ "statisch". Lokale Variablen können durch den Einsatz des Schlüsselwortes static zu statischen Datenobjekten werden. Sowohl globale als auch statische lokale Variablen werden bei ihrer Erzeugung mit dem Wert 0 initialisiert.
- Argumente: Daten, die einer Funktion bei ihrem Aufruf übergeben werden. Anzahl und Typ der Argumente müssen mit der Funktions-Deklaration übereinstimmen.
- Parameter: Variablen einer Funktion, die die Argument-Werte des Aufrufers speichern. Die Definition der Parameter erfolgt sich in der Parameterliste. Diese folgt unmittelbar auf den Funktionsnamen und muß von runden Klammern umschlossen werden. Die einzelnen Parameter sind durch Komma zu trennen.
- Wertübergabe ("call by value"): ist der Normalfall bei der Weitergabe von Argumenten an eine Funktion. Dabei erhält die aufgerufene Funktion Kopien der Argument-Werte; sie kann daher keine Veränderungen an den Argument-Variablen des Aufrufers vornehmen. Eine Ausnahme bilden die Datentypen, die immer Adreßwerte beinhalten: Arrays und Pointer; sie erlauben immer den Zugriff auf die Daten der aufrufenden Funktion.
- Adreßübergabe ("call by reference"): Soll die aufgerufene Funktion die Argument-Variablen des Aufrufers verändern, dann muß sie die Adresse dieser Datenobjekte erhalten. Bei "normalen" Variablen müssen Sie die entsprechende Adresse mit Hilfe des Adreßoperators ermitteln, während Array-Namen und Pointer schon von Haus aus Adreßwerte repräsentieren.
- Rückgabewert: Derjenige Wert, den eine Funktion mit Hilfe der return-Anweisung an den Aufrufer zurückgibt. Dieser muß dem Datentyp entsprechen, der bei der Funktionsdeklaration angegeben wurde. Funktionen vom Typ void dürfen keine Werte zurückgeben. Wenn Sie in einer Funktion, die nicht vom Typ void ist, auf die return-Anweisung verzichten, dann ist ihr Ergebnis undefiniert.
- Prototyp: dient dazu, dem Compiler Typ und Anzahl der Argumente sowie den Rückgabewert einer Funktion bekannt zu machen, sofern die Funktion im Quellcode vor ihrer Definition aufgerufen wird. Im Gegensatz zur alten Methode der Funktionsdeklaration enthalten Prototypen Bezeichner für den Datentyp der Argumente und (optional) die Argumentnamen. Ein Funktionsprototyp wird mit einem Semikolon abgeschlossen. Ein solches darf hingegen nicht nach der Parameterliste in einer Funktions-Definition stehen.