33 votes

En-têtes précompilés

J'ai un exemple de projet (pas le mien) qui est dans Visual C++ 6. Je suis en train de le convertir à Visual Studio 2008.

L'ancien projet est d'utiliser les en-têtes précompilés. Maintenant, les questions sont:

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

  2. Depuis l'ancien projet est d'utiliser les en-têtes précompilés. Je vais aussi utiliser dans Visual Studio 2008 (nouveau projet). Mais j'ai des erreurs en disant que "vous Avez oublié d'inclure stdafx.h", pour remédier au problème, j'ai include "stdafx.h" dans chaque fichier source. Cela a parfaitement fonctionné. Mais l'ancien projet n'a pas été compris "stdafx.h" dans chaque fichier? Alors comment puis-je adhérer à include "stdafx.h" dans chaque fichier source. Parce que pas chaque fichier source besoin de l'inclure des fichiers définis dans le "stdafx.h", seulement quelques fait. Comment est-ce fait?

EDIT: COMMENT PUIS-JE EXLCUDE DES FICHIERS À PARTIR DE L'AIDE DE L'EN-TÊTE PRÉCOMPILÉ?

57voto

Martin Liversage Points 43712

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

Souvent, les fichiers source C++ inclure les en-têtes de bibliothèques externes. Dans Windows, vous comprennent windows.h. Ces fichiers d'en-tête sont souvent très volumineux et prend un certain temps à traiter. Chaque fois que vous compilez un fichier C++ le compilateur doit de lire et de traiter des milliers de lignes à partir de ces fichiers d'en-tête. Mais les bibliothèques externes ne changent pas et vous pouvez économiser beaucoup de temps si vous ne traiter ces fichiers à la fois et d'enregistrer le résultat.

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

Les en-têtes précompilés dans Visual C++

Dans Visual C++, il est de coutume de mettre tous vos non-modification de fichiers d'en-tête en stdafx.h. Ensuite, vous demander au compilateur de créer l'en-tête précompilé stdafx.pch lors de la compilation d' stdafx.cpp. Si vous souhaitez utiliser l'en-tête précompilé dans un autre .cpp le fichier que vous devez inclure stdafx.h comme le premier d'inclure le fichier et de le demander 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 vous suffit de demander au compilateur de ne pas utiliser un en-tête précompilé pour le fichier source. (Ou vous pouvez inclure stdafx.h.)

D'en-tête précompilé pour les fichiers source

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 dans le menu contextuel. Les options pour les en-têtes précompilés sont trouvés à des Propriétés de Configuration => C/C++ => les en-Têtes Précompilés. Si vous modifiez ces paramètres, vous aurez souvent envie de le faire pour toutes les configurations (par exemple, Debug et Release).

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é. L' stdafx.cpp auront un individu paramètres 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 les paramètres individuels de sur ces de ne pas utiliser les en-têtes précompilés.

6voto

Jason Williams Points 31901

Lorsque vous compilez le code, le compilateur a qu'à regarder dans tous les #inclus les en-têtes de savoir comment compiler le code dans votre .fichier cpp.

Avec les grands projets (ou à l'aide de bibliothèques comme MFC) ces en-têtes peuvent devenir énormes, et donc de prendre du temps pour compiler.

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

Une exigence dans Visual Studio, c'est que si vous utilisez un fichier d'en-tête, il doit être inclus dans chaque fichier dans le projet.

Si le projet est petit, ou si vous ne construisez pas souvent, alors vous pouvez simplement désactiver le "en-tête précompilé" option (dans les paramètres du projet. Cela s'applique à l' ensemble du projet). Le seul effet que vous allez obtenir est qu'il peut compiler plus lentement. Ou de laisser l'option activée et juste ajouter #include "stdafx.h" comme le premier d'inclure dans chaque fichier.

2voto

bocco Points 454
  1. Voir MSDN
  2. Habituellement. vous devez inclure "stdafx.h" dans chaque fichier cpp. En réalité, ils sont précompilés et vous n'avez pas à craindre qu'ils ne soient pas tous utilisés dans un fichier concret.

0voto

Christoph Heindl Points 219

J'ai écrit un article sur les techniques permettant de réduire le temps de compilation. Parmi ces techniques, vous trouverez un post sur un en-tête précompilé et son application ici . Il explique également comment désactiver les en-têtes précompilés pour certaines unités.

Cordialement, Christoph

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X