Wozu extern bei Funktionsdefinition?
-
Hallo,
ich habe hier einen Code vorliegen, bei dem ein extern vor der Funktions-Definition steht. Was hat das für einen Sinn?`
Ich dachte immer man setzt ein extern vor Funktionsdeklarationen in Header-Files, damit der Linker weis, dass diese Funktion in einem anderen Modul definiert wird.
-
Hallo,
ich habe hier einen Code vorliegen, bei dem ein extern vor der Funktions-Definition steht.
Sieht man eher selten...
Was hat das für einen Sinn?`
Den gleichen, den man geben möchte, wenn man extern bei der Deklaration verwendet.
Ich dachte immer man setzt ein extern vor Funktionsdeklarationen in Header-Files, damit der Linker weis, dass diese Funktion in einem anderen Modul definiert wird.
Selbst das ist nicht nötig, Funktionsdeklarationen bzw. das Festlegen des Prototyps implizieren extern.
MfG,
Probe-Nutzer
-
Probe-Nutzer schrieb:
Hallo,
ich habe hier einen Code vorliegen, bei dem ein extern vor der Funktions-Definition steht.
Sieht man eher selten...
Was hat das für einen Sinn?`
Den gleichen, den man geben möchte, wenn man extern bei der Deklaration verwendet.
Ich dachte immer man setzt ein extern vor Funktionsdeklarationen in Header-Files, damit der Linker weis, dass diese Funktion in einem anderen Modul definiert wird.
Selbst das ist nicht nötig, Funktionsdeklarationen bzw. das Festlegen des Prototyps implizieren extern.
MfG,
Probe-Nutzer
-
d.h. dieses extern ist überflüssig, da global definierte Funktionen sowieso im gesamten Projekt sichtbar sind oder?
-
Ja genau, nur wenn static deklariert wird, sind solche Funktionen in anderen Übersetzungseinheiten nicht "sichtbar".
MfG,
Probe-Nutzer
-
Ach ja wenn wir schon bei static sind.
Stimmt mein Wissen zu static?static bei Funktionen: nur der Sichtbarkeit halber (sichtbar nur in dem Modul). Sonst keine weitere Bedeutung.
static bei Variablen: nur sichtbar in dem Modul oder Funktion, in der sie deklariert wurde; wird implizit mit 0 initialisiert. Wenn in Funktion deklariert, behält sie ihren Wert auch beim Verlassen der Funktion, da auf dem Stack gespeichert wird.
-
test123 schrieb:
static bei Variablen: nur sichtbar in dem Modul oder Funktion, in der sie deklariert wurde; wird implizit mit 0 initialisiert. Wenn in Funktion deklariert, behält sie ihren Wert auch beim Verlassen der Funktion, da auf dem Stack gespeichert wird.
sie wird dann eben nicht auf'm stack gespeichert. der ist viel zu dynamisch. da kann man keine statischen variablen speichern.