Maison >développement back-end >C++ >Pourquoi devrais-je inclure des fichiers d'en-tête (.h) au lieu de fichiers d'implémentation (.cpp) en C ?

Pourquoi devrais-je inclure des fichiers d'en-tête (.h) au lieu de fichiers d'implémentation (.cpp) en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-26 01:06:12504parcourir

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

Inclure les fichiers .cpp : un cas de duplication de fonctions

Lors du développement en C, il est généralement recommandé d'inclure l'en-tête (.h) fichiers pour la fonctionnalité, plutôt que des fichiers d’implémentation (.cpp). L'inclusion de fichiers .cpp peut entraîner des erreurs dues à la duplication de fonctions.

Considérons l'exemple de code suivant :

// 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;
}

Ce code sera compilé et exécuté correctement car le fichier d'en-tête (.h) inclut uniquement la déclaration de la fonction foo(), tandis que la définition est fournie dans le fichier .cpp séparé.

Cependant, si nous remplaçons l'inclusion du fichier d'en-tête dans main.cpp avec l'inclusion du fichier .cpp :

// main.cpp
#include <iostream>
#include "foop.cpp" // Implementation file containing the function definition

Cela entraînera une erreur du compilateur :

multiple definition of foo(int)
first defined here

Cela est dû au fait que le préprocesseur copie le contenu du fichier inclus dans le fichier source principal. L'inclusion du fichier .cpp copie efficacement la définition de la fonction foo() dans main.cpp, ce qui entraîne une définition en double de la fonction.

Pour éviter la duplication de fonction, il est recommandé d'inclure les fichiers d'en-tête (.h) uniquement pour les déclarations et les fichiers .cpp pour les définitions. Cela permet de garantir que les fonctions ne sont définies qu'une seule fois dans le programme.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn