Einschließen von .cpp-Dateien: Führt es zu Duplikaten?
In einem Programmierkontext sind Header-Dateien (.h) und Quelldateien (. cpp) spielen eine entscheidende Rolle. Header-Dateien enthalten Funktions- und Klassendeklarationen, die es anderen Modulen ermöglichen, mit ihnen zu interagieren. Obwohl allgemein empfohlen wird, Header-Dateien einzuschließen, stellt sich die Frage: Können Sie stattdessen Quelldateien (.cpp) direkt einbinden?
Die Antwort ist ein klares „Nein“. Das Einschließen von CPP-Dateien kann zu mehreren Definitionsfehlern führen. Um zu verstehen, warum, schauen wir uns den folgenden Code an:
// main.cpp #include <iostream> #include "foop.h" int main() { int x = 42; std::cout << x << std::endl; std::cout << foo(x) << std::endl; return 0; }
// foop.h #ifndef FOOP_H #define FOOP_H int foo(int a); #endif
// foop.cpp int foo(int a) { return ++a; }
Mit der enthaltenen Header-Datei lässt sich der Code ohne Probleme kompilieren und ausführen. Nehmen wir jedoch an, wir fügen fälschlicherweise die Quelldatei (.cpp) anstelle der Header-Datei ein:
// main.cpp #include <iostream> #include "foop.cpp" int main() { int x = 42; std::cout << x << std::endl; std::cout << foo(x) << std::endl; return 0; }
In diesem Szenario gibt der Compiler einen Fehler aus:
multiple definition of foo(int) first defined here
Was ist die Ursache? dieser Fehler? Wenn der Präprozessor eine Quelldatei (.cpp) einschließt, kopiert er den gesamten Inhalt dieser Datei in die aktuelle Datei. Im Wesentlichen würde also der folgende Code generiert werden:
// main.cpp #include <iostream> int foo(int a) { return ++a; } int main() { int x = 42; std::cout << x << std::endl; std::cout << foo(x) << std::endl; return 0; }
Wie Sie sehen können, ist die Funktion foo() jetzt zweimal in derselben Datei definiert, was zu einem Fehler bei mehreren Definitionen führt. Um dieses Problem zu vermeiden, ist es wichtig, Header-Dateien (.h) anstelle von Quelldateien (.cpp) einzuschließen. Header-Dateien deklarieren Funktionen und Klassen ohne ihre Implementierungen, um Duplikate zu verhindern und sicherzustellen, dass im gesamten Programm nur eine Definition jeder Funktion vorhanden ist.
Das obige ist der detaillierte Inhalt vonWarum sollten Sie es vermeiden, .cpp-Dateien anstelle von .h-Dateien einzuschließen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!