3.2    Deklaration und Definition

Bevor Sie eine Variable als Platzhalter für einen Wert verwenden können, müssen Sie dem Compiler den Datentyp und den Bezeichner mitteilen. Nur so kann die Variablentabelle korrekt gefüllt werden. Dieser Vorgang der Bekanntmachung wird als Deklaration bezeichnet. Was ein gültiger Bezeichner ist, haben Sie bereits in Abschnitt 2.4.1, »Bezeichner«, erfahren. Die Datentypen lernen Sie in diesem Kapitel kennen.

Damit eine Variable also verwendet werden kann, muss Speicherplatz dafür reserviert werden. Für das konkrete Speicherobjekt der Variablen im Programm bzw. im ausführbaren Code wird die Definition vereinbart.

Eine Wertzuweisung darf selbstverständlich mehrmals im Code vorkommen, eine Deklaration hingegen nur einmal im Programm. Sie können beispielsweise eine Ganzzahlvariable ivar wie folgt vereinbaren:

int ivar;

Hier deklarieren Sie eine Variable vom Datentyp int mit dem Bezeichner ivar und definieren diese damit auch gleichzeitig. Somit ist es in diesem Beispiel nicht falsch zu sagen, dass eine Definition gleichzeitig auch eine Deklaration ist.

Mehrere Bezeichner desselben Datentyps lassen sich auch in einer Zeile, getrennt durch Kommata, vereinbaren:

int ivar1, ivar2, ivar3;

Wenn Sie eine Variable nur deklarieren wollen, müssen Sie das Schlüsselwort extern davorsetzen:

// datei-01.c
extern int ivar; // Deklaration

Mit diesem Schlüsselwort bestimmen Sie, dass kein Speicherplatz für ivar reserviert wird und dass Sie die Definition dieser Variablen (für gewöhnlich) in einem anderen Modul vornehmen. Die Definition und Speicherplatzreservierung erfolgen jetzt beispielsweise in einem anderen Quelltextmodul, z. B. durch

// datei-02.c
int ivar;
Wozu überhaupt zwischen Deklaration und Definition unterscheiden?

An dieser Stelle mag Ihnen der Unterschied zwischen einer Deklaration und einer Definition noch etwas trivial erscheinen. Aber wenn Sie Ihren Quellcode auf mehrere Quelltextmodule aufteilen, ist es essenziell, diesen Unterschied zu kennen und Deklarationen und Definitionen voneinander trennen zu können. Denn irgendwann haben Sie Code geschrieben, den Sie mehrfach verwenden wollen, um das Rad nicht immer wieder neu zu erfinden. Und schon lagern Sie einige Teile Ihrer Deklarationen in eine eigene Header-Datei aus und müssen dann sauber zwischen Deklaration und Definition unterscheiden.