Ein einfaches "Hallo Welt" Programm zur Vorstellung einer Programmier- oder Scriptsprache
kommt noch ohne Variablen aus, doch so wie ein Beginner etwas tiefer in einer neu zu erlernenden Sprache einsteigen möchte,
kommt er nicht mehr an Variablen vorbei. Eine Variable ist eigentlich nichts weiter als ein Bezeichner, dem ein Wert zugeordnet
wird und ein Speicherplatz im System, wo dieser zugeordnete Wert abgelegt und gespeichert werden kann. Eine Variable ist somit
die Adresse eines Speicherplatzes im System und der Bezeichner einer Variablen verweist auf diese Adresse.
Die Verwendung von Variablen hat unter anderem den Vorteil, dass im Programmverlauf nicht jedes Mal der Wert eingefügt werden
muss, sondern einfach der Bezeichner verwendet werden kann, wobei sich dieser Wert im Laufe der Abarbeitung des Programms
ändern kann. Bevor eine Variable verwendet werden kann, muss selbige definiert und deklariert werden. Und spätestens an diesem
Punkt bekommt ein Einsteiger zum ersten Mal graue Haare und wird feststellen, dass es sich bei C und C++ um alles andere, nur
nicht um Programmiersprachen handelt, die leicht erlernbar wären. Doch was ist nun eigentlich eine Deklaration und was ist eine
Definition?
Da Programmiersprachen vom Menschen entworfen werden, könnte der Einsteiger darauf schließen, dass die
Begriffe Deklaration und Definition Rückschlüsse auf ihre Bedeutung im normalen Sprachgebrauch erlauben. So könnte eine
Deklaration für eine Erklärung oder für eine Inhalts- oder Wertangabe stehen. Eine Definition könnte hingegen das Wesen
einer Erklärung beschreiben und den Inhalt oder die Werte eindeutig bestimmen. Möglicherweise hilft an dieser Stelle ein
Beispiel als Vergleich weiter, um die Bedeutung einer Deklaration und Definition besser einzuordnen.
Es sei angemerkt, beinahe alle Vergleiche hinken, dennoch lässt sich ohne beispielhafte Vergleiche einiges nur begrenzt
verdeutlichen. Der nachfolgende Vergleich erinnert entfernt an eine Fabel, bedient sich jedoch nur einer nichtmenschlichen
Spezies für einen Vergleich.
Nehmen wir an, einige Völker der Honigbiene hätten eines Tages genug davon, dass ihr emsig gesammelter Honig von den Imkern
bei der Ernte durch Zuckerlösungen ausgetauscht wird, fühlen sich ausgebeutet und veröffentlichen eine gemeinsame Deklaration
über die grundsätzlichen Rechte auf angemessene Entlohnung. Nehmen wir weiterhin an, dass diese Deklaration allseitig unter
den Bienenvölkern auf Zustimmung stoßen würde und der Wortlaut dieser Deklaration auch an alle größeren Imker-Verbände
übermittelt wurde.
Trotz dieser Deklaration könnten Imker bei Verstößen gegen diese Deklaration nicht zur Verantwortung gezogen werden.
Zumindest nicht bevor die jeweiligen Gesetzgeber der einzelnen Bienenvölker eindeutige Definitionen in ihren Gesetzeswerken
aufnehmen und somit in diesen Gesetzeswerken definieren, welche Sanktionen den Imkern bei welchen Vergehen drohen.
Leider beruht die Sprache von Programmierern nicht immer auf den alltäglichen Sprachgebrauch und weil die Begriffe Deklaration
und Definition das durchschnittliche Verständnis von Einsteigern noch nicht genug strapazieren, wird noch zusätzlich der
Begriff Initialisierung verwendet. Dieser Begriff leitet sich vom lateinischen Wort initium ab und steht für Anfang oder
Beginn. Ein verwandter Begriff ist zum Beispiel die Initiale, die für den Anfangsbuchstaben eines Kapitels steht und im Plural
für die Anfangsbuchstaben eines Namens. Im Bereich der elektronischen Datenverarbeitung steht eine Initialisierung für die
Zuweisung eines Anfangswertes. Nachfolgend einige Stichpunkte und praktische Beispiele.
Um ein wenig mehr Ordnung in das Chaos der Begriffe zu bekommen, eine kleine Auflistung wichtiger Stichpunkte:
Im ersten Listing verweigert der Compiler seinen Dienst und im Buildprotokoll wird der Fehler - 'Mehrheit': nichtdeklarierter Bezeichner - aufgeführt. Wie aus dem Beispiel ersichtlich, wurde zwar ein Bezeichner benannt, jedoch kein Typ für die Variable benannt, womit dieser Bezeichner als nicht nichtdeklariert gilt.
#include <stdio.h> int main() { Mehrheit; // 'Mehrheit': nichtdeklarierter Bezeichner printf("Deklaration fuer %d Stimme Mehrheit.\n", Mehrheit); getchar(); return 0; }
Im zweiten Listing wird nur eine Warnung ausgegeben, während der Compiler nach Bestätigung der Mitteilung seine Arbeit verrichtet, da die Variable "Mehrheit" deklariert und definiert, jedoch nicht initialisiert wurde. Im Buildprotokoll erscheint der Hinweis: Die nicht initialisierte lokale Variable "Mehrheit" wurde verwendet.
#include <stdio.h> int main() { int Mehrheit; /* Die Variable 'Mehrheit' wird ohne Initialisierung verwendet. */ printf("Deklaration fuer %d Stimme Mehrheit.\n", Mehrheit); getchar(); return 0; }
Fehlende Initialisierung der
verwendeten Variablen
Wie aus dem Bild ersichtlich wird, hatte die Nicht-Initialisierung der Variablen zu Folge, dass irgend
ein sich zufällig im Speicher befindlicher Wert für die Ausgabe verwendet wurde.
Im dritten Listing wird ein Abstimmungsergebnis errechnet. Abgestimmt hatten insgesamt 820 von regionalen und überregionalen
Bienenvölkern delegierte Teilnehmer über die weiter oben als Vergleich erwähnte Deklaration und über eine entsprechende
Gesetzesvorlage. Mit 412 Ja-Stimmen wurde eine Mehrheit erreicht.
#include <stdio.h> int main() { int delegierteTe = 820; int einfacheMehr = delegierteTe / 2; int Befuerworter = 412; int Mehrheit; if (einfacheMehr < Befuerworter){ Mehrheit = Befuerworter - einfacheMehr; printf("Die Deklaration wurde mit %d Stimmen Mehrheit angenommen.\n", Mehrheit); } else printf("Die Deklaration wurde abgelehnt.\n"); getchar(); return 0; }
In diesem Listing wurden alle Variablen mit Typ und Bezeichner deklariert und definiert, wobei nur der Typ int für ganze Zahlen verwendet wurde, da halbe Stimmen bei der Abstimmung nicht zählten. Der Bezeichner für die Anzahl der delegierten Teilnehmer und der Bezeichner für die Anzahl der Befürworter wurden darüber hinausgehend mit einem Wert initialisiert. Dem Bezeichner für die einfache Mehrheit wurde hingegen nur die durch 2 geteilte Anzahl der delegierten Teilnehmer zugewiesen und der Bezeichner Mehrheit erhält nur unter der Bedingung den zugewiesen Wert einer Rechenoperation, wenn das Abstimmungsergebnis positiv ausfällt, was im Beispiel mit 412 Ja-Stimmen der Fall ist.
Korrektes Abstimmergebnis
durch die richtige Deklaration, Definition
und Initialisierung der verwendeten Variablen.
Wer sich durch die einschlägige, im Handel erhältliche oder im Web veröffentlichte Literatur kämpft,
wird auf unterschiedliche, teilweise widersprüchliche, meistens jedoch schwer verständliche Erklärungen stoßen. Ein
Vergleich mit anderen Script- und Programmiersprachen könnte ein wenig helfen.
Deklaration, Definition und Initialisierung von Variablen
Alle Kommentare stehen für links = rechts vom Zuweisungsoperator.
In C/C++:
int main() { /* Deklaration und Definition durch Bekanntgabe des Typs und des Bezeichners = Initialisierung mit einem Wert */ int Bezeichner = 10; } // Möglicher Fehler, deklarierte aber undefinierte Varaiable Bezeicher; printf("%d\n", Bezeicher); // nicht deklarierter Bezeichner // Möglicher Fehler, deklarierte und definierte, aber nicht initialisierte Varaiable int Bezeichner; printf("%d\n", Bezeicher); // nicht initialisierte VariableIn PHP:
function name() { /* Deklaration = Definition und Initialisierung mit einem Wert, wobei der Typ des Wertes erkannt wird */ $Bezeichner = 10; } // Möglicher Fehler, deklarierte aber undefinierte Variable $zeile; echo $zeile; // Notice: Undefined variableIn JavaScript:
function name() { /* Deklaration = Definition und Initialisierung mit einem Wert, wobei der Typ des Wertes erkannt wird */ var Bezeichner = 10; } // Möglicher Fehler, deklarierte aber undefinierte Variable var Bezeichner; document.write(Bezeichner); // Ausgabe: undefined
Aus dem Vergleich wird ersichtlich, dass in C/C++ Deklaration und Definition mehr oder weniger
ineinander verschwimmen, da bei der Deklaration einer Variablen diese ebenfalls durch die Zuweisung eines Typs (im Beispiel
int) definiert wird. Anders hingegen in PHP oder JavaScript, wo der Typ von dem bei der Initialisierung zugewiesenen Wert
abhängig ist.
Eine Ausnahme gibt es in C/C++, jedoch nur insofern das Schlüsselwort "extern" verwendet wird. Für eine Variable,
die mit extern deklariert wurde, wird kein Speicher reserviert, da durch das Schlüsselwort extern dem Compiler mitgeteilt wird,
dass die Variable als nicht definiert gilt, weil sie bereits innerhalb des Codes einer externen, jedoch zur Anwendung
gehörenden Datei definiert wurde.
Hinweis: In einem Listing auf dieser Seite wurde ein if-Statement verwendet, wobei sich der Einsatz und die Schreibweise (Syntax) dieser Kontrollstruktur kaum von der in Perl, PHP oder JavaScript unterscheidet.
weiterlesen: Variablen » Typen und Sichtbarkeit
Einstieg in C/C++
Win32-API
NET Framework