Die Deklaration von Variablen geht syntaktish immer nach demselben Schema vor sich: Attribute (optional), Typ, Name, Initialisierung(Optional),Semikolon. Z.B.:
static const unsigned int counter = 12;
static
und const
sind Attribute, unsigned int
der Typ,
counter
der Name und =12
die Initialisierung.
Auf Variablen kann, je nach Attributen und Ort der Deklaration nur in
bestimmten Teilen des Programms zugegriffen werden. Wird eine Variable
zu Beginn eines von {}
eingeschlossenem Block deklariert,
z.B. am Anfang einer Funktion, so ist sie nur innerhalb dieses Blockes
sichtbar. Solche Variablen heißen lokal. Andere Objekte und
Funktionen können durchaus denselben Namen haben. Normalerweise
werden solche Variablen automatisch
erzeugt, wenn das Programm den Block
erreicht und automatisch wieder entfernt, wenn der Block verlassen
wird. Ist eine solche Variable nicht initialisiert oder hat nicht das Attribut
static
, so ist ihr Wert bei Betreten des Blockes
undefiniert. Diese Variablen nennt man automatische
Variablen. Hat sie hingegen das Attribut static
, so behält sie ihren
letzten zugewiesenen Wert, auch wenn der Block zwischenzeitlich
verlassen wurde. Wird sie nicht explizit initialisiert, wird sie mit
0 vorbesetzt.
Wird eine Variable außerhalb jeden Blockes deklariert, kann auf sie von überall im Programm zugegriffen werden. Ihr Name muß daher Programmweit einmalig sein. Ist sie nicht explizit initialisiert, wird sie mit 0 vorbesetzt. Solche Variablen heißen globale Variablen. Man sollte globale Variablen nur selten einsetzen, da sie die Gesamtstruktur verunklaren können und zu subtilen Fehlern führen können.
Ein Zwischending sind globale Variablen mit dem Attribut
static
. Diese sind nur innerhalb des Moduls, in dessen
Quelltext sie deklariert wird sichtbar. Auf solche Variablen kann
nicht von anderen Moduln zugegriffen werden, es treten daer auch keine
Namenskonflikte auf.
Enthält eine Variablendeklaration das Attribut extern
, so
weist das daraufhin, daß eine Variable des angegebenen Typs und
Namens anderswo im Programm, etwa in einem anderen Modul, deklariert
wird, welche dann gemeint ist.
Enthält eine Variablendeklaration das Attribut const
, so muß
diese Variable initialisiert werden, und darf dann nicht mehr
verändert werden. (Variable ist dann vielleicht ein falscher
Ausdruck). Ist sie Außerdem noch static
deklariert, kann der
Compiler sie komplett weglassen, wenn ihre Adresse nicht benötigt wird.
Bei der Auswahl des Namens für Variablen (wie auch für
selbstgeschriebene Funktionen oder Typen) gibt es einige syntaktische
Einschränkungen: Namen dürfen nur aus Groß- und Kleinbuchstaben,
Ziffern und dem Unterstrich (_
) bestehen, das erste Zeichen
darf dabei keine Ziffer sein. Der sich so ergebende Name darf nicht
mit einem reservierten Wort, also z.B. while,if,switch
identisch sein. Durchaus möglich ist es aber, Namen von
Standardfunktionen wie sin
oder printf
zu verwenden. Der
Linker nimmt diese dann eben nicht aus der Standard-Library, sondern
die selbstgeschriebene Funktion.