Deklaration - Definition
-
AJ und ich können sich gerade nicht einigen was nun der Unterschied ist.
AJs Meinung
extern int x; // Deklaration int x; // Deklaration int x = 5; // Definition extern int x == int x
SideWinders Meinung
extern int x; // Deklaration int x; // Definition (Da Speicherbereitstellung) int x = 5; // Definition (Initialisierung) auto int x == int x
Wer hat nun recht?
MfG SideWinder
-
Hallo,
ich würde sagen dass du recht hast:
int x; // Definition (Da Speicherbereitstellung
Das ist eine Definition.
-
Mist geschrieben.
-
Weil
struct s { int x; };
so viel Speicher belegt, richtig?
-
Um Daniel E.s Beitrag nochmal zu verdeutlichen:
Side hat recht, aber die Begründung ist falsch.
-
Ist das also bloß per Definition (oder Deklaration *g*) so, oder gibts da auch noch eine tatsächliche Begründung?
MfG SideWinder
-
Eine Deklaration ist eine Bekanntgabe: du sagst, es gibt irgendwas. Du sagst aber nicht wo und manchmal auch nicht genau was.
Eine Definition ist mehr als nur eine Bekanntgabe - es ist zugleich eine exakte Erklärung um was es sich handelt. Und vorallem wo es ist, nämlich exakt hier
struct S;
ist eine Bekanntgabe. Ich sage damit: Es gibt irgendwo eine struct mit Namen S. Ich sage aber nicht welche Member sie hat und wo sie definiert ist.struct S { int i; };
Hier definiere ich die struct - denn ich gebe alle nötigen Informationen bekannt.Bei int i; hat der Compiler alle nötigen Informationen. Erst durch das extern enthalte ich ihm eine Informaton vor: nämlich wo die Variable definiert ist.
-
(Die C++-Faqs haben zu dem Thema gar nichts zu sagen. typedef-Gefrickel ist in C zB per Definition Definition, in C++ aber nicht.)
Shade Of Mine schrieb:
struct S { int i; };
Hier definiere ich die struct - denn ich gebe alle nötigen Informationen bekannt.Bei int i; hat der Compiler alle nötigen Informationen.
6.7#5 spricht:
# A declaration specifies the interpretation and attributes of a set of identifiers. A definition
# of an identifier is a declaration for that identifier that:
# — for an object, causes storage to be reserved for that object;
# — for a function, includes the function body;98)
# — for an enumeration constant or typedef name, is the (only) declaration of the identifier.Ich wüssste nicht, wie ich daraus schließen könnte, 'int i' sei hier eine Definition (besonders, weil C in seiner Syntaxbeschreibung das Ding für einen Teil der struct-declarator-list hält).
Noch ein kleines Quiz zum Abschluß: Ist
int i; int i = 0;
in legales C?
-
@Daniel E.: It depends? Oder?
BTW: Auflösung noch abwarten und dann ab in die FAQ, so einen Beitrag gibt es bisher nur in der C++-FAQ und dort zählen offenbar andere Fakten
MfG SideWinder