Les En-Têtes Précompilés

j'ai un exemple de projet (pas le mien) qui est en C visuel++ 6. J'essaie de le convertir en Visual Studio 2008.

l'ancien projet utilise des en-têtes précompilés. Maintenant, les questions sont:

  1. que sont les en-têtes précompilés?

  2. puisque l'ancien projet utilise des en-têtes précompilés. Je les utiliserai également dans Visual Studio 2008 (le nouveau projet). Mais je reçois des erreurs disant que "vous Avez oublié d'inclure stdafx.h", pour remédier au problème, j'inclus " stdafx.h" dans chaque fichier source. Cela a parfaitement fonctionné. Mais l'ancien projet n'incluait pas " stdafx.h" dans chaque fichier? Alors comment puis-je opt-out pour inclure "stdafx.h" dans chaque fichier source. Parce que tous les fichiers source n'ont pas besoin des fichiers include définis dans "stdafx.h", seulement quelques fait. Comment est-ce fait?

EDIT: COMMENT PUIS-JE EXTRAIRE CERTAINS FICHIERS DE L'EN-TÊTE PRÉCOMPILÉ?

31
demandé sur akif 2009-08-18 16:32:41

3 réponses

que sont les en-têtes précompilés?

souvent les fichiers source C++ incluent des en-têtes provenant de bibliothèques externes. Dans Windows vous incluez windows.h. Ces fichiers d'en-tête peuvent être très volumineux et qu'ils prennent un certain temps à traiter. Chaque fois que vous compilez un fichier C++, le compilateur doit lire et traiter des milliers de lignes à partir de ces fichiers d'en-tête. Mais les bibliothèques externes ne changent pas et vous pouvez gagner beaucoup de temps si vous ne traitez ces fichiers qu'une seule fois et enregistrez les résultat.

un en-tête précompilé est simplement un tas de fichiers d'en-tête qui a été traité à une forme intermédiaire qui plus tard peut être utilisé par le compilateur encore et encore.

headers précompilés en C ++ visuel

Dans Visual C++, il est d'usage de #include tous vos fichiers d'en-tête non-changeants dans stdafx.h. Ensuite, vous demander au compilateur de créer l'en-tête précompilé stdafx.pch lors de la compilation stdafx.cpp ce qui ne fait qu'inclure stdafx.h. Si vous souhaitez utiliser l'en-tête précompilé dans un autre .cpp fichier que vous devez inclure stdafx.h comme premier fichier include et instruction au compilateur d'utiliser stdafx.pch pour votre en-tête précompilé.

Si vous obtenez une erreur de ne pas y compris stdafx.h il suffit de demander au compilateur de ne pas utiliser d'en-tête précompilé pour ce fichier source particulier. (Ou vous pouvez inclure stdafx.h.)

paramètres D'en-tête précompilés pour chaque source les fichiers

Visual C++ vous permet de contrôler les paramètres du compilateur pour l'ensemble du projet et pour des fichiers individuels. Pour accéder aux propriétés individuelles, vous sélectionnez le fichier source dans l'explorateur de solutions, cliquez droit dessus et sélectionnez Propriétés à partir du menu contextuel. Les options pour les en-têtes précompilés sont Propriétés De Configuration=> C / C++=>Headers Précompilés. Si vous modifiez ces réglages, vous souvent envie de le faire pour toutes les configurations (par exemple, Debug et Libération).

Lorsque vous utilisez les en-têtes précompilés, vous aurez un paramètre pour l'ensemble du projet qui indique au compilateur d'utiliser stdafx.pch pour l'en-tête précompilé. stdafx.cpp aura un paramétrage individuel qui indique au compilateur de générer stdafx.pch, et si vous avez des fichiers source qui ne comprennent pas stdafx.h vous pouvez définir des paramètres individuels sur ceux-ci à ne pas utiliser les en-têtes précompilés.

55
répondu Martin Liversage 2014-12-11 15:48:08

lorsque vous compilez du code, le compilateur doit regarder dans tous les en-têtes #included pour savoir comment compiler le code dans votre .fichier cpp.

avec les grands projets (ou ceux qui utilisent des bibliothèques comme MFC) ces en-têtes peuvent devenir énormes, et donc prendre beaucoup de temps à compiler.

parce que la plupart de ces en - têtes ne changent pas souvent (si jamais), vous pouvez obtenir le compilateur pour les "précompiler" - il les traite et sauve son état dans un en-tête précompilé. La prochaine fois qu'il compile, il n'a pas besoin de lire et compiler tous ces en-têtes à nouveau, il est donc beaucoup plus rapide.

une condition de Visual Studio est que si vous utilisez un en-tête précompilé, il doit être inclus dans chaque fichier du projet.

si le projet est petit, ou si vous ne le construisez pas souvent, alors vous pouvez juste désactiver l'option "en-tête précompilé" (dans les paramètres du projet. Ceci s'applique à la entier projet). Le seul effet que vous obtiendrez est qu'il peut compiler plus lentement. Ou laissez l'option activée et ajoutez simplement # include " stdafx.h " comme première inclusion dans chaque fichier.

4
répondu Jason Williams 2009-08-18 12:41:32
  1. Voir MSDN
  2. Habituellement. vous devez inclure " stdafx.h" dans chaque fichier cpp. Tout le problème est qu'ils sont précompilés, et vous n'avez pas à vous inquiéter qu'ils ne soient pas tous utilisés dans un fichier concret.
0
répondu bocco 2009-08-18 12:42:42