Tentative Definitionen

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Deklarationssyntax - Index

Der ANSI-C-Standard unterstützt die Idee der tentative Definition. Jede externe Datendeklaration, die keinen Speicherklassen-Spezifizierer und keinen Initialisierer hat, wird als tentative Definition betrachtet. Wenn der deklarierte Bezeichner später definiert wird, dann wird die tentative Definition behandelt, als wäre der Speicherklassen-Bezeichner extern angegeben worden. Das heißt: Die tentative Definition wird zu einer einfachen Referenzdeklaration.

Wird das Ende der Übersetzungseinheit erreicht und keine Definition mit einem Initialisierer für den Bezeichner gefunden, dann wird die tentative Definition zu einer vollen Definition. Der Speicher für das Objekt wird reserviert, aber nicht initialisiert (d.h., mit Null gefüllt). Zum Beispiel:

int x;
int x;           /*zulässig, eine Kopie von x ist reserviert */
int y;
int y = 4;       /* zulässig, y wird mit 4 initialisiert */
int z = 5;
int z = 6;       /* nicht zulässig, z wird zum zweiten Mal initialisiert */

Im Gegensatz zu ANSI C verfügt C++ nicht über tentative Deklaration; eine externe Datendeklaration ohne Speicherklassen-Bezeichner ist immer eine Definition.

Siehe auch