Inclure les fichiers .cpp : introduit-il des doublons ?
Dans un contexte de programmation, les fichiers d'en-tête (.h) et les fichiers source (. cpp) jouent un rôle crucial. Les fichiers d'en-tête contiennent des déclarations de fonctions et de classes, permettant à d'autres modules d'interagir avec elles. Bien qu'il soit généralement recommandé d'inclure les fichiers d'en-tête, une question se pose : pouvez-vous inclure directement les fichiers source (.cpp) à la place ?
La réponse est un « non » catégorique. L'inclusion de fichiers .cpp peut entraîner plusieurs erreurs de définition. Pour comprendre pourquoi, examinons le code suivant :
// 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; }
Avec le fichier d'en-tête inclus, le code se compile et s'exécute sans problème. Cependant, disons que nous incluons par erreur le fichier source (.cpp) au lieu du fichier d'en-tête :
// 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; }
Dans ce scénario, le compilateur renvoie une erreur :
multiple definition of foo(int) first defined here
Qu'est-ce qui cause cette erreur ? Lorsque le préprocesseur inclut un fichier source (.cpp), il copie l'intégralité du contenu de ce fichier dans le fichier actuel. Ainsi, essentiellement, le code suivant serait généré :
// 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; }
Comme vous pouvez le constater, la fonction foo() est désormais définie deux fois dans le même fichier, entraînant une erreur de définition multiple. Pour éviter ce problème, il est crucial d'inclure les fichiers d'en-tête (.h) au lieu des fichiers source (.cpp). Les fichiers d'en-tête déclarent des fonctions et des classes sans leurs implémentations, empêchant ainsi la duplication et garantissant qu'une seule définition de chaque fonction existe dans l'ensemble du 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!