Quelle est la différence entre un .fichier cpp et .h fichier?
Parce que j'ai fait .fichiers cpp puis transféré dans .h de fichiers, à la seule différence que je peux trouver, c'est que vous ne pouvez pas #include .fichiers cpp. Quelle est la différence que je suis absent?
- Pour comprendre les réponses ci-dessous, vous pourriez avoir besoin pour poser une autre question, à savoir: "Quelle est la différence entre une "déclaration" et une "définition" en C++?"
- Je sais faire la différence entre une déclaration et une définition.
- Vous pouvez inclure tout ce que vous voulez, mais étape de lien ne fonctionnera plus si vous d'inclure des variables globales dans plusieurs unités de compilation. C'est pourquoi il existe une convention de ne pas lier .fichiers cpp.
Vous devez vous connecter pour publier un commentaire.
Le C++ système de build (compilateur) ne connaît pas de différence, donc c'est tout l'un des conventions.
La convention est que .h les fichiers sont des déclarations, et .fichiers cpp sont les définitions.
C'est pourquoi .h les fichiers sont incluses -- nous comprennent les déclarations.
L' .fichier cpp est l'unité de compilation : c'est le vrai fichier de code source qui sera compilé (en C++).
L' .h (en-tête) les fichiers sont des fichiers qui seront pratiquement copié/collé dans le .fichiers cpp où l' #include précompilateur instructions apparaissent à l'écran. Une fois que les en-têtes de code est inséré dans le .rpc code, la compilation de l' .rpc peut commencer.
Considérant ce qui suit:
Par conséquent, toutes les définitions dans un fichier d'en-tête devrait être en ligne ou statique. Fichiers d'en-tête également contenir des déclarations qui sont utilisés par plus d'un fichier CPP.
Définitions qui ne sont ni statiques ni inline sont placés dans des fichiers CPP. Aussi, toutes les déclarations qui ne sont nécessaires que dans un délai d'un fichier CPP sont souvent placés dans ce fichier CPP lui-même, au lieu de en toute (partageable) fichier d'en-tête.
.h de fichiers ou de fichiers d'en-tête, sont utilisés à la liste accessible au public les variables d'instance et les méthodes et dans la déclaration de classe. .fichiers cpp, ou fichiers de mise en œuvre, sont utilisés pour la mise en œuvre de ces méthodes et l'utilisation de ces variables d'instance.
La raison pour laquelle ils sont séparés est parce que .h les fichiers ne sont pas compilés en code binaire tout .fichiers cpp sont. Prenez une bibliothèque, par exemple. Dites que vous êtes l'auteur et que vous ne voulez pas qu'il soit open source. Si vous distribuez le binaire compilé bibliothèque et les fichiers d'en-tête de vos clients. Qui leur permet de voir facilement toutes les informations au sujet de votre bibliothèque de classes qu'ils peuvent utiliser sans être en mesure de voir comment vous avez mis en œuvre ces méthodes. Ils sont plus pour les gens à l'aide de votre code plutôt que de le compilateur. Comme l'a dit avant: c'est la convention.
Un en-tête (
.h
,.hpp
, ...) fichier contientclass X { ... };
)inline int get_cpus() { ... }
)void help();
)extern int debug_enabled;
)Un fichier source (
.c
,.cpp
,.cxx
) contientvoid help() { ... }
ouvoid X::f() { ... }
)int debug_enabled = 1;
)Toutefois, la convention que les en-têtes sont nommés avec un
.h
suffixe et les fichiers sources sont nommés avec un.cpp
suffixe n'est pas vraiment nécessaire. On peut toujours dire un bon compilateur comment traiter un fichier, quel que soit son nom de fichier de suffixe (-x <file-type>
pour gcc. Comme-x c++
).Source fichiers contiennent les définitions qui doit être présent qu'une seule fois dans tout le programme. Donc, si vous incluez un fichier source quelque part et puis lier le résultat de la compilation de ce fichier, puis celui du fichier source en soi, alors bien sûr, vous obtiendrez des erreurs d'édition de liens, parce que vous avez ces définitions apparaissent deux fois: une Fois le fichier source, puis, dans le fichier inclus. C'est pourquoi vous avez eu des problèmes avec notamment la
.cpp
fichier.D'autres ont déjà offert de bonnes explications, mais j'ai pensé que je me dois de préciser les différences entre les diverses extensions:
Bien sûr, comme il a déjà été souligné, ce ne sont que des conventions. Le compilateur ne fait pas attention à eux - c'est purement pour le bénéfice du codeur.
Une bonne règle de base est ".h les fichiers doivent avoir de déclarations [potentiellement] utilisé par plusieurs fichiers source, mais pas de code qui est exécuté."
Par la convention .h les fichiers sont inclus par d'autres fichiers, et de ne jamais compilé directement par eux-mêmes. .fichiers cpp sont, à nouveau, par la convention - les racines du processus de compilation; ils comprennent .h les fichiers directement ou indirectement, mais généralement pas .fichiers cpp.