Maison > développement back-end > C++ > Pourquoi l'inclusion d'un fichier .cpp au lieu d'un fichier .h en C entraîne-t-elle des erreurs ?

Pourquoi l'inclusion d'un fichier .cpp au lieu d'un fichier .h en C entraîne-t-elle des erreurs ?

DDD
Libérer: 2024-12-04 10:01:11
original
158 Les gens l'ont consulté

Why does including a .cpp file instead of a .h file in C   lead to errors?

Inclure les fichiers d'en-tête par rapport au code source

Lorsque vous travaillez avec plusieurs fichiers sources dans un programme C, il est crucial de comprendre la distinction entre inclure l'en-tête fichiers (.h) et fichiers de code source (.cpp).

Dans l'exemple fourni, vous avez rencontré une erreur lors de l'inclusion "foop.cpp" au lieu de "foop.h" dans le fichier main.cpp. En effet, les fichiers d'en-tête sont spécifiquement conçus pour déclarer des prototypes de fonctions et d'autres informations nécessaires, tandis que les fichiers de code source contiennent les implémentations réelles des fonctions.

Incluant les fichiers d'en-tête

Incluant l'en-tête files permet au compilateur de localiser et de reconnaître les fonctions définies dans d’autres fichiers de code source sans dupliquer les définitions. En incluant "foop.h", le fichier main.cpp accède au prototype de la fonction foo(), permettant au programme de l'appeler sans connaître tous les détails de l'implémentation.

Inclure les fichiers de code source

En revanche, inclure directement « foop.cpp » copierait tout le code de ce fichier dans le fichier main.cpp, entraînant une erreur de définition multiple. Puisque foo() est défini à la fois dans foop.cpp et main.cpp, le compilateur ne sait plus quelle définition utiliser.

Comment ça marche

Lorsque vous incluez un fichier d'en-tête, son contenu est effectivement copié dans le fichier de code source actuel. Par exemple, inclure « foop.h » entraînerait le code équivalent suivant dans main.cpp :

// Header file contents

int foo(int a);

int main(int argc, char *argv[]) {
  // Rest of the main.cpp code
}
Copier après la connexion

Cependant, inclure « foop.cpp » conduirait à ceci :

// Source code file contents

int foo(int a){
    return ++a;
}

int main(int argc, char *argv[]) {
  // Rest of the main.cpp code
}
Copier après la connexion

Conséquences

L'inclusion directe des fichiers de code source peut avoir des conséquences inattendues, telles que comme :

  • Pollution de l'espace de noms : les fonctions et variables définies dans foop.cpp feraient partie de l'espace de noms principal, potentiellement en conflit avec d'autres symboles globaux.
  • Augmentation du temps de compilation : y compris une source volumineuse Les fichiers de code peuvent ralentir le processus de compilation.
  • Sujet aux erreurs : l'inclusion manuelle des fichiers de code source est moins fiable que l'utilisation de fichiers d'en-tête, qui sont automatiquement généré par le compilateur.

Bonne pratique

Par conséquent, il est toujours recommandé d'inclure des fichiers d'en-tête (.h) lorsque l'on fait référence à des fonctions et des déclarations, et pour conserver l'implémentation du code source dans des fichiers séparés (.cpp). Cela garantit la modularité du code, évite les erreurs et améliore la lisibilité du code.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal