Tous les compilateurs C++ ont un grave problème de performances à traiter. La compilation de code C++ est un processus long et lent.
La compilation des en-têtes inclus au-dessus des fichiers C++ est un très long et lent processus. La compilation de l'énorme tête de structures qui font partie de l'API de Windows et d'autres grandes bibliothèques API est un très, très long et lent processus. D'avoir à faire plus, et plus, et plus, pour chaque Rpc fichier source est un glas.
Ce n'est pas spécifique à Windows, mais un vieux problème rencontré par tous les compilateurs qui ont pour compiler contre un grand nombre d'API comme Windows.
Le compilateur de Microsoft peuvent atténuer ce problème avec un truc simple appelé les en-têtes précompilés. Le truc, c'est plutôt astucieux: bien que chaque fichier CPP peut potentiellement et légalement donner un peu différent du sens à la chaîne des fichiers d'en-tête inclus au-dessus de chaque fichier Cpp (par des choses comme avoir différentes macros #define avais à l'avance de l', ou en incluant les en-têtes dans un ordre différent), qui est le plus souvent pas le cas. La plupart du temps, nous avons des dizaines ou des centaines de fichiers, mais ils sont tous destinés à avoir le même sens pour tous les fichiers Cpp compilés dans votre application.
Le compilateur peut faire d'énormes économies de temps si il n'est pas nécessaire de commencer à compiler chaque fichier Cpp et ses dizaines de comprend littéralement de zéro à chaque fois.
L'astuce consiste à désigner un spécial fichier d'en-tête comme le point de départ de toutes les chaînes de compilation, ce qui est appelé " un en-tête précompilé fichier, qui est habituellement un fichier nommé stdafx.h simplement pour des raisons historiques.
Tout simplement la liste de tous vos gros les en-têtes de votre Api dans votre stdafx.h de fichier, dans l'ordre, et puis commencer à chacune de vos fichiers CPP au très haut avec un #include "stdafx.h"
, avant de tout contenu significatif (à peu près la seule chose autorisée avant que ses commentaires).
Dans ces conditions, plutôt que de commencer à partir de zéro, le compilateur commence à rassembler de la déjà enregistré des résultats de la compilation de tout ce en stdafx.h
.
Je ne crois pas que cette astuce est unique pour les compilateurs Microsoft, je ne pense que c'était un modèle original de développement.
Pour les compilateurs Microsoft, le paramètre qui contrôle l'utilisation des en-têtes précompilés est contrôlé par un argument de ligne de commande du compilateur: /Yu "stdafx.h"
. Comme vous pouvez l'imaginer, l'utilisation de l' stdafx.h
nom du fichier est simplement une convention; vous pouvez modifier le nom si vous le souhaitez.
Dans Visual Studio 2010, ce paramètre est contrôlé à partir de l'interface graphique via un clic-Droit sur un RPC Projet, en sélectionnant "Propriétés" et en accédant à "Propriétés de Configuration\C/C++\en-Têtes Précompilés". Pour les autres versions de Visual Studio, l'emplacement dans l'interface sera différente.
Notez que si vous désactivez les en-têtes précompilés (ou exécuter votre projet grâce à un outil qui ne les supporte pas), il n'est pas à votre programme illégales; il signifie simplement que votre outil de compiler tout à partir de zéro à chaque fois.
Si vous êtes à la création d'une bibliothèque sans les dépendances Windows, vous pouvez facilement commenter ou supprimer #include dans le stdafx.h fichier. Il n'est pas nécessaire de supprimer le fichier en soi, mais de toute évidence, vous pouvez le faire aussi bien, par la désactivation de la précompiler en-tête réglage ci-dessus.