Warum würden Sie `extern void my_func();` statt `my_utils.h`?
Arbeite ich an einigen code, den ich nicht geschrieben habe und merkte, dass es viele extern void my_func();
.
Mein Verständnis ist, dass extern
für Globale Variablen, die nicht für die Funktionen.
Gibt es einen praktischen Grund, zu erklären, eine Funktion als extern
anstatt es in eine header-Datei und darunter? Oder ist das einfach eine stilistische Wahl?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist nur erforderlich, wenn, aus irgendeinem Grund werden die header-Datei nicht die Funktion deklarieren. Und
extern
ist immer für unnötige Funktionen, als Funktionen sind immerextern
standardmäßig.extern
seinem Prototyp, oder den Kopf.#include
-ing eine header-Datei mit den Funktionsprototypen ist äquivalent zu dem schreiben der Prototypen direkt in Ihrem Quellcode-Datei, und Sie sehen nicht ein header-Dateien, die voll von explizitenextern
Funktionen!extern
Funktionen im header. wir haben, um es in .c-Dateien, in denen Sie genannt werden.extern
ing es. ich war falsch.R func(T arg)
sagt dem compiler, dass es eine Funktion namensfunc
gibt einen Wert vom TypR
und hat einen formalen parameter vom TypT
genanntarg
. Dies ermöglicht die Verwendung der Funktion Namen, die im Kontext der Erklärung. Der linker ist verantwortlich für die Lösung von solchen Namen ein und finden Sie die entsprechende Funktion definition die möglicherweise kann gefunden werden, in einer anderen compilation unit.Einen Einsatz von
extern
Funktionen ist, dass angenommen, Sie haben zwei Module: module_a (implementiert inmodule_a.h
undmodule_a.c
- Dateien), module_b (implementiert inmodule_b.h
undmodule_b.c
- Dateien). Will man nun eine spezifische Funktion module_b zu verwenden, in module_a. Aber Sie wollen nicht setzen alle die Funktionalität von module_b in module_a. So dass statt#include "module_b.h"
können Sieextern
die gewünschte Funktion Prototyp nur.extern
ist unnötig.extern
. Irgendeine Idee warum? Ich habe 3 Dateien: main.cpp (enthält main()), Funktionen.h und functions.cpp. functions.cpp definiert eine Funktion (benannt Spaß ()), die nur 0 zurück. aus main(), ich riefcout << fun() << endl;
compiler sagt fun() ist schwarzarbeit. dann schrieb ichextern int fun();
vor main(). dann hat es geklappt.int fun();
.Ist es nicht genug, zu erklären Prototyp in deiner *.c-Datei vor der Verwendung der Funktion, statt wie den ganzen header-Datei ? Wir müssen nicht extern in jedem Fall für Funktionen. Ich habe nicht versucht noch, aber er nehme an, das es so funktioniert.