2009-06-26 8 views
2

Chaque fichier doit-il utiliser #include "stdafx.h" lors de l'utilisation d'en-têtes précompilés? Ou seulement les fichiers sources doivent l'inclure.En-têtes précompilés MSVC: Quels fichiers doivent # inclure "stdafx.h"?

EDIT: En outre, mon fichier d'en-tête précompilé #includes beaucoup d'en-têtes STL. Mais, dans mes en-têtes, j'ai parfois des fonctions qui retournent std::vector ou quelque chose comme ça, donc j'ai besoin de #include <vector> de toute façon. Est-ce pire que d'inclure stdafx.h? Je dois inclure les définitions de mon cadre de test unitaire.

Répondre

4

Chaque fichier source doit l'inclure avant toute ligne sans commentaire. Les en-têtes n'ont pas besoin de l'inclure, car chaque fichier source l'inclura avant tout autre en-tête.

+0

Mais que se passe-t-il si le fichier source d'un autre projet contient ce fichier d'en-tête? Dans ce cas, stdafx.h du premier projet ne sera pas inclus. –

+0

Vous n'êtes autorisé qu'un en-tête précompilé par projet, et chaque _source file_ (ne l'incluez pas à partir d'autres fichiers d'en-tête!) Doit d'abord l'inclure. Si vous voulez travailler avec deux projets avec des fichiers d'en-tête précompilés différents, pas de problème - tant que ce sont des projets séparés. Ils auront chacun leur propre fichier d'en-tête, pas de conflit. – bdonlan

+0

Vous ne me comprenez pas. Projet 1: stdafx.h: #include ... One.h: vecteur Certains(); One.cpp: #include "stdafx.h" #include "One.h" .... Projet 2: Two.cpp: #include "One.h" Dans la classe de vecteur Two.cpp est indéfini, nous avons donc une erreur ici. –

0

Vous pouvez définir si vous souhaitez utiliser un fichier d'en-tête précompilé ou non au niveau du projet ou d'un fichier. Pour le paramètre de projet, accédez à la boîte de dialogue Propriétés du projet et cliquez sur Propriétés de configuration/C/C++/En-têtes précompilés. Il existe une option pour Créer/Utiliser l'en-tête précompilé. Vous pouvez remplacer le paramètre de niveau de projet sur chaque fichier .cpp en définissant la même option dans la boîte de dialogue des propriétés du fichier.

+0

Ce n'était pas la question .... – rlbond

0

Tous vos fichiers C/C++ doivent avoir votre en-tête précompilé au début oui - s'il est défini pour ce projet. Mais vous pouvez l'avoir désactivé/activé par fichier C/C++ (ce que Kei a dit).

Si vous avez des en-têtes standard à inclure, placez-les tous dans l'en-tête précompilé. Ensuite, vous voulez les utiliser dans les fichiers d'en-tête normaux (.h). Tant que tous les projets et fichiers utilisent des en-têtes précompilés.

0

Comme d'autres l'ont dit, seuls vos fichiers source doivent inclure l'en-tête précompilé. J'ajouterais seulement que, à mon avis, le code devrait compiler correctement avec ou sans en-têtes précompilés. Pour ce faire, les en-têtes doivent être autonomes et ne pas reposer sur les fichiers sources, y compris les autres en-têtes requis. Je vois l'en-tête précompilé uniquement comme un moyen d'accélérer la compilation et non comme un référentiel de tous les en-têtes utilisés dans un projet.

Questions connexes