Heim  >  Artikel  >  Backend-Entwicklung  >  Warum sollte ich Header-Dateien (.h) anstelle von Implementierungsdateien (.cpp) in C einbinden?

Warum sollte ich Header-Dateien (.h) anstelle von Implementierungsdateien (.cpp) in C einbinden?

Barbara Streisand
Barbara StreisandOriginal
2024-11-26 01:06:12470Durchsuche

Why Should I Include Header (.h) Files Instead of Implementation (.cpp) Files in C  ?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn