Hallo moe,
meine Theorie besagt: „Der Speicherklassenmodifizierer extern
hat keine Auswirkungen“. Wenn ich eine globale Variable „float
x“ innerhalb einer funktion mittels „extern float x“ erneut
deklariere, ändert sich ja nix.
Der Compiler erzeugt nicht nur Code, sondern aus Anweisungen zum benötigten Speicher für den Linker.
float x;
teilt dem Linker mit, Speicherplatz für einen Float anzulegen, auf welchen dann mit dem Namen „x“ zugegrifen werden kann.
extern float x;
besagt aber nur, dass irgendwo Speicherplatz für einen Float mit dem Namen „x“ existiert, auf welchen man zugreifen möchte. Der Linker soll dann nach der Stelle suchen wo der Speicherplatz für „x“ angelegt wurde und diese Adresse verwenden.
Wenn du nur eine Datei verwendest, genügt
extern float x;
dem Compiler um ohne zu murren alles zu übersetzen. Erst der Linker macht dann Probleme, weil er nirgends den Speicherplatz für „x“ finden kann.
„extern“ funktioniert auch noch mit FunctionPrototypes, macht aber heute keinen Sinn mehr.
MfG Peter(TOO)
P.S. die nächste Frage kommt dann zu „static“ ??