Tim T. wrote:
> Um sie allerdings in einer anderen Quelltextdatei zu nutzen musst du sie
> dort mit extern nochmals "definieren".
Genauer gesagt, spricht man in diesem Falle von "deklarieren".
Unter "Definieren" versteht man in C die Stelle, an der die
tatsächliche Implementierung dann steht.
Also ist
eine Definition (die, falls ihr keine andere Deklaration voran gegangen
ist, zugleich eine Deklaration sein kann), aber
ist immer eine Deklaration. Die Definition reserviert in diesem
Falle den Speicher, die Deklaration macht nur den Namen (und den
Datentyp) dem Compiler bekannt.
Bei Funktionen kann man das "extern" auch weglassen, da
auf Grund der fehlenden anschließenden Implementierung eindeutig
als Deklaration erkennbar ist. Das ist damit vollständig äquivalent
zu
1 | extern int beispiel(void);
|
Die Definition wäre hier:
1 | int beispiel(void)
|
2 | {
|
3 | return 42;
|
4 | }
|
Auch hier wiederum: geht der Definition keine gesonderte Deklaration
voraus, dann ist die Definition zugleich Deklaration (für den Rest
der gegenwärtigen Übersetzungseinheit).