Einbinden von .cpp-Dateien: Ein Fall von Funktionsduplizierung
Bei der Entwicklung in C wird im Allgemeinen empfohlen, Header (.h) einzuschließen. Dateien für die Funktionalität statt Implementierungsdateien (.cpp). Das Einschließen von .cpp-Dateien kann aufgrund von Funktionsduplizierungen zu Fehlern führen.
Betrachten wir das folgende Codebeispiel:
// main.cpp #include <iostream> #include "foop.h" // Header file containing the function declaration int main() { std::cout << foo(42) << std::endl; return 0; } // foop.h int foo(int a); // Function declaration // foop.cpp int foo(int a) { // Function definition return ++a; }
Dieser Code wird korrekt kompiliert und ausgeführt, da die Header-Datei (.h) Enthält nur die Deklaration der foo()-Funktion, während die Definition in der separaten .cpp-Datei bereitgestellt wird.
Allerdings, wenn wir die Header-Datei ersetzen Einbindung in main.cpp mit der Einbindung der .cpp-Datei:
// main.cpp #include <iostream> #include "foop.cpp" // Implementation file containing the function definition
Dies führt zu einem Compilerfehler:
multiple definition of foo(int) first defined here
Dies liegt daran, dass der Präprozessor den Inhalt der eingebundenen Datei kopiert in die Hauptquelldatei. Durch das Einbinden der .cpp-Datei wird die foo()-Funktionsdefinition effektiv in main.cpp kopiert, was zu einer doppelten Definition der Funktion führt.
Um eine Funktionsduplizierung zu vermeiden, wird empfohlen, Header-Dateien (.h) einzubinden nur für Deklarationen und .cpp-Dateien für Definitionen. Dadurch wird sichergestellt, dass Funktionen nur einmal im Programm definiert werden.
Das obige ist der detaillierte Inhalt vonWarum sollte ich Header-Dateien (.h) anstelle von Implementierungsdateien (.cpp) in C einbinden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!