Die Bedeutung von beidem entzieht sich mir.
Antworten
Zu viele Anzeigen?Das Konzept der Deklaration und der Definition wird zu einem Fallstrick, wenn Sie die externe Speicherklasse verwenden, da sich Ihre Definition an einem anderen Ort befindet und Sie die Variable in Ihrer lokalen Codedatei (Seite) deklarieren. Ein Unterschied zwischen C und C++ besteht darin, dass in C die Deklarationen normalerweise am Anfang einer Funktion oder Codeseite vorgenommen werden. In C++ ist das nicht so. Sie können an einer Stelle Ihrer Wahl deklarieren.
Stadien der Generierung einer ausführbaren Datei:
(1) Präprozessor -> (2) Übersetzer/Compiler -> (3) Linker
In Phase 2 (Übersetzer/Compiler) teilen die Deklarationsanweisungen in unserem Code dem Compiler mit, dass wir diese Dinge in Zukunft verwenden werden und dass Sie die Definition später finden können:
Übersetzer darauf achten, dass : Was ist was? bedeutet Erklärung
und (3) die Stufe (Linker) braucht eine Definition, um die Dinge zu verbinden
Linker stellen sicher, dass : Wo ist was? bedeutet Definition
Es gibt einige sehr klare Definitionen, die in K&R (2. Auflage) verstreut sind; es ist hilfreich, sie an einem Ort zusammenzufassen und sie als Ganzes zu lesen:
"Definition" bezieht sich auf die Stelle, an der die Variable erstellt oder ihr Speicherplatz zugewiesen wird; "Deklaration" bezieht sich auf die Stellen, an denen die Art der Variablen angegeben wird, aber kein Speicherplatz zugewiesen wird. [p. 33]
...
Es ist wichtig, zu unterscheiden zwischen dem Erklärung einer externen Variablen und ihrer Definition . Eine Deklaration gibt die Eigenschaften einer Variablen (vor allem ihren Typ) bekannt; eine Definition bewirkt auch, dass Speicherplatz zur Verfügung gestellt wird. Wenn die Zeilen
int sp; double val[MAXVAL]
außerhalb einer Funktion erscheinen, sind sie definieren. die externen Variablen
sp
yval
und dienen auch als Erklärung für den Rest der Quelldatei.Andererseits sind die Linien
extern int sp; extern double val[];
deklarieren für den Rest der Quelldatei, die
sp
ist einint
und dassval
ist einedouble
Array (dessen Größe an anderer Stelle festgelegt wird), aber sie erstellen weder die Variablen noch reservieren sie Speicherplatz für sie.Es darf nur einen einzigen Definition einer externen Variablen unter allen Dateien, aus denen das Quellprogramm besteht. ... Array-Größen müssen bei der Definition angegeben werden, sind aber optional mit einem
extern
Erklärung. [S. 80-81]...
Deklarationen spezifizieren die Interpretation, die jedem Bezeichner gegeben wird; sie reservieren nicht unbedingt den mit dem Bezeichner verbundenen Speicherplatz. Deklarationen, die Speicherplatz reservieren, werden als Definitionen . [p. 210]
Die Deklaration erfolgt, wenn eine primitive oder Objektreferenzvariable oder -methode erstellt wird, ohne dass ein Wert oder ein Objekt zugewiesen wird. int a; final int a;
Die Definition bedeutet, dass der Wert bzw. das Objekt zugewiesen wird int a =10;
Initialisierung bedeutet die Zuweisung von Speicher für eine entsprechende Variable oder ein Objekt.
Erklärung Die Deklaration einer Variablen dient dazu, dem Compiler folgende Informationen mitzuteilen: Name der Variablen, Art des Wertes, den sie enthält, und den Anfangswert, falls sie einen solchen annimmt, d.h. die Deklaration enthält Einzelheiten über die Eigenschaften einer Variablen. Dagegen, Definition einer Variable gibt an, wo die Variable gespeichert wird, d.h. der Speicher für die Variable wird bei der Definition der Variable zugewiesen.
20 Stimmen
Um ehrlich zu sein, hatte ich große Schwierigkeiten, herauszufinden, wer wer ist, und ich fand die Namen nicht offensichtlich. Ich hatte kein Problem mit den Bedeutungen, sondern nur damit, welche Namen ich mit den Bedeutungen in Verbindung bringen konnte.
2 Stimmen
Wir haben das schon ausführlich besprochen: stackoverflow.com/questions/671925/
7 Stimmen
Dennoch ist es keine doppelte Frage, da diese Frage sich auf C/C++ bezieht, während die andere Frage sich auf alle oder keine Sprachen im Allgemeinen bezieht. Es gibt nur doppelte Antworten (da bei der anderen Frage einige Antworten alle Sprachen außer C und/oder C++ ignorierten).
7 Stimmen
@DavidThornley Ich verwende diesen Trick: a Definition gibt eine feinere Beschreibung einer bestimmten Variablen oder Funktion. Um mich daran zu erinnern, erinnere ich daran, dass die Mitte des Wortes "Definition" eine Ähnlichkeit mit dem Wort "feiner" hat :)
2 Stimmen
@MarcoLeogrande: Oder "definitiv"!
1 Stimmen
Eine viel interessantere Frage ist die nach dem Unterschied zwischen einer Erklärung und einem Prototyp ": stackoverflow.com/questions/5481579/
1 Stimmen
Hier ist ein schöner Artikel, der erklärt, wie das externe Schlüsselwort und die Speicherzuweisung mit Deklarationen / Definitionen zusammenhängt: dreamincode.net/forums/topic/171468-erklärungen-vs-definitionen
1 Stimmen
Das kann helfen cprogramming.com/declare_vs_define.html
0 Stimmen
Wenn Sie Schwierigkeiten haben, sich die Begriffe zu merken, beachten Sie bitte, dass die Begriffe in alphabetischer Reihenfolge stehen - Erklärung, Definition, Verweis. Das ist im Allgemeinen die Reihenfolge, in der sie erscheinen sollten.
0 Stimmen
Mögliches Duplikat von Was genau sind C++-Definitionen, Deklarationen und Zuweisungen?