Oliver S. schrieb:
> Die Definition definiert einen Typ und seinen Identifier, die
> Deklaration legt den dann tatsächlich an.
Da wirfst du zwei unterschiedliche Dinge in einen Topf, nämlich Typen
und Variablen. Beide können sowohl deklariert, als auch definiert
werden, ganz unabhängig von einander.
> Das hier ist sind Deklarationen:
> extern int member;
Das ist eine Deklaration einer Variablen.
> class Foo
> {
> Foo(){}
> };
Das ist eine Definition eines Typs und darin die Definition eines
Konstruktors.
> int bar();
Das ist eine Deklaration einer Funktion.
db8fs schrieb:
> Normalerweise ist es schon so zu lesen, wie's da steht. Ein Datentyp
> wird deklariert und beschreibt die Speicheraufteilung, wenn aus dem
> Datentyp Daten erzeugt/instanziiert werden.
Eine reine Deklaration eines Datentyps gibt ebenfalls nur den Namen des
Typs an, z.B.:
Eine Definition gibt alle Details des Datentyps bekannt. Dadurch wird
noch nichts erzeugt, aber es ist die Grundlage, um den Typ instanziieren
zu können.
> Unter Definition versteht man üblicherweise das Bekanntmachen einer
> Variable oder Funktion für den Linker.
Der Linker hat nicht unbedingt was damit zu tun. Variablen können auch
static oder lokal definiert sein. Dann bekommt der Linker sie gar nicht
erst zu Gesicht.
> Klassen- oder Funktionsdeklarationen werden üblicherweise z.B. in der .h
> gemacht, die Definition der Funktionen der Klasse passiert in der .cpp.
Die Definition der Klasse selbst allerdings steht dann im Header.
> Anderer Name für Deklaration ist Prototyp.
Allerdings nur bei Funktionen.
> Wenn's eine globale Variable ist, wird ein Symbol für den Linker erzeugt
> und die Variable beim ersten Zugriff darauf instanziiert.
Globale Variablen werden "irgendwann" vor main() erzeugt, nicht erst
beim ersten Zugriff. Das passiert nur bei lokalen static-Variablen.