Nachdem ich die Frage gelesen habe , kenne ich die Unterschiede zwischen Deklaration und Definition. Bedeutet das also, dass Definition gleich Deklaration plus Initialisierung ist?
c++
c
terminology
Tony
quelle
quelle
Antworten:
Erklärung
Die Erklärung bezieht sich im Allgemeinen auf die Einführung eines neuen Namens in das Programm. Sie können beispielsweise eine neue Funktion deklarieren, indem Sie ihre "Signatur" beschreiben:
void xyz();
oder einen unvollständigen Typ deklarieren:
class klass; struct ztruct;
und zu guter Letzt, um ein Objekt zu deklarieren:
int x;
Es wird im C ++ - Standard in §3.1 / 1 beschrieben als:
Definition
Eine Definition ist eine Definition eines zuvor deklarierten Namens (oder kann sowohl Definition als auch Deklaration sein). Zum Beispiel:
int x; void xyz() {...} class klass {...}; struct ztruct {...}; enum { x, y, z };
Insbesondere definiert es der C ++ - Standard in §3.1 / 1 als:
Initialisierung
Die Initialisierung bezieht sich auf die "Zuweisung" eines Werts zur Konstruktionszeit. Für ein generisches Objekt vom Typ
T
hat es häufig die folgende Form:T x = i;
aber in C ++ kann es sein:
T x(i);
oder auch:
T x {i};
mit C ++ 11.
Fazit
Es hängt davon ab, ob. Worüber sprichst du? Wenn Sie über ein Objekt sprechen, zum Beispiel:
int x;
Dies ist eine Definition ohne Initialisierung. Das Folgende ist stattdessen eine Definition mit Initialisierung:
int x = 0;
In bestimmten Zusammenhängen ist es nicht sinnvoll, von "Initialisierung", "Definition" und "Deklaration" zu sprechen. Wenn Sie beispielsweise über eine Funktion sprechen, bedeutet die Initialisierung nicht viel.
Die Antwort lautet also nein : Definition bedeutet nicht automatisch Deklaration plus Initialisierung.
quelle
int x;
ist sowohl eine Definition als auch eine Erklärung.So does it mean definition equals declaration plus initialization
.In der Erklärung heißt es: "Dieses Ding existiert irgendwo":
int foo(); // function extern int bar; // variable struct T { static int baz; // static member variable };
Definition sagt "dieses Ding existiert hier; machen Sie Erinnerung daran":
int foo() {} // function int bar; // variable int T::baz; // static member variable
Die Initialisierung ist zum Zeitpunkt der Definition für Objekte optional und lautet "Hier ist der Anfangswert für dieses Objekt":
int bar = 0; // variable int T::baz = 42; // static member variable
Manchmal ist es stattdessen zum Zeitpunkt der Deklaration möglich:
struct T { static int baz = 42; };
… Aber das führt zu komplexeren Funktionen.
quelle
Zumindest für C gemäß C11 6.7.5:
Gemäß C11 6.7.9.8-10:
Im Großen und Ganzen führt eine Erklärung eine Kennung ein und liefert Informationen darüber. Für eine Variable ist eine Definition eine Deklaration, die Speicher für diese Variable zuweist.
Die Initialisierung ist die Angabe des Anfangswertes, der in einem Objekt gespeichert werden soll. Dies ist nicht unbedingt derselbe wie beim ersten expliziten Zuweisen eines Werts. Eine Variable hat einen Wert, wenn Sie sie definieren, unabhängig davon, ob Sie ihr explizit einen Wert geben oder nicht. Wenn Sie ihm keinen expliziten Wert geben und die Variable automatisch gespeichert wird, hat sie einen Anfangswert, aber dieser Wert ist unbestimmt. Wenn es statischen Speicher hat, wird es abhängig vom Typ implizit initialisiert (z. B. werden Zeigertypen auf Nullzeiger initialisiert, arithmetische Typen werden auf Null initialisiert usw.).
Wenn Sie also eine automatische Variable definieren, ohne einen Anfangswert dafür anzugeben, z.
int myfunc(void) { int myvar; ...
Sie definieren es (und deklarieren es daher auch, da Definitionen Deklarationen sind), initialisieren es jedoch nicht. Daher ist Definition nicht gleich Deklaration plus Initialisierung.
quelle
"Das bedeutet also, dass Definition gleich Deklaration plus Initialisierung ist."
Es ist nicht unbedingt erforderlich, dass Ihre Deklaration ohne Initialisierung einer Variablen wie folgt lautet:
void helloWorld(); //declaration or Prototype. void helloWorld() { std::cout << "Hello World\n"; }
quelle