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!