À quoi sert «stdafx.h» dans Visual Studio?

Un fichier nommé stdafx.h est automatiquement généré lorsque je lance un projet dans Visual Studio 2010. Je dois créer une bibliothèque C ++ multi-plateforme, donc je ne peux / ne peux pas utiliser ce fichier d’en-tête.

À quoi sert stdafx.h ? Est-ce que je ne fais que supprimer ce fichier d’en-tête?

Tous les compilateurs C ++ ont un problème de performance sérieux à traiter. La compilation du code C ++ est un processus long et lent.

Comstackr les en-têtes inclus dans les fichiers C ++ est un processus très long et lent. La compilation des énormes structures d’en-tête qui font partie de l’API Windows et d’autres grandes bibliothèques d’API est un processus très , très long et lent. Avoir à le faire de plus en plus pour chaque fichier source Cpp est un coup de grâce.

Ce n’est pas unique à Windows, mais un problème ancien auquel sont confrontés tous les compilateurs qui doivent comstackr sur une grande API comme Windows.

Le compilateur Microsoft peut améliorer ce problème avec une astuce simple appelée en- têtes précompilés . L’astuce est assez simple: bien que chaque fichier CPP puisse potentiellement et légalement donner un sens légèrement différent à la chaîne de fichiers d’en-tête incluse dans chaque fichier Cpp (par exemple, avoir des macros différents # définis avant les inclusions ou en incluant les en-têtes dans un ordre différent), le plus souvent ce n’est pas le cas. La plupart du temps, nous avons des dizaines ou des centaines de fichiers inclus, mais tous sont destinés à avoir la même signification pour tous les fichiers Cpp compilés dans votre application.

Le compilateur peut économiser énormément de temps s’il ne doit pas commencer à comstackr tous les fichiers Cpp, en plus de ses dizaines d’inclusions littéralement à partir de zéro à chaque fois.

L’astuce consiste à désigner un fichier d’en-tête spécial comme sharepoint départ de toutes les chaînes de compilation, le fichier appelé «en-tête précompilé», qui est généralement un fichier nommé stdafx.h simplement pour des raisons historiques.

Il suffit de lister tous vos gros en-têtes pour vos API dans votre fichier stdafx.h, dans l’ordre approprié, puis de lancer chacun de vos fichiers CPP tout en haut avec un #include "stdafx.h" , avant tout contenu significatif (juste à propos de la seule chose autorisée avant est les commentaires).

Dans ces conditions, au lieu de partir de zéro , le compilateur commence à comstackr à partir des résultats déjà stdafx.h de la compilation dans stdafx.h .

Je ne crois pas que cette astuce soit propre aux compilateurs Microsoft, et je ne pense pas non plus que ce soit un développement original.

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 du nom de fichier stdafx.h est simplement une convention; vous pouvez changer 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 projet CPP, 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 graphique sera différent.

Notez que si vous désactivez les en-têtes précompilés (ou exécutez votre projet via un outil qui ne les prend pas en charge), cela ne rend pas votre programme illégal. Cela signifie simplement que votre outil comstackra tout à partir de zéro à chaque fois.

Si vous créez une bibliothèque sans dépendances Windows, vous pouvez facilement commenter ou supprimer #includes du fichier stdafx.h. Il n’est pas nécessaire de supprimer le fichier en tant que tel, mais vous pouvez également le faire en désactivant le paramètre d’en-tête de précompilation ci-dessus.

C’est un “fichier d’en-tête précompilé” – tous les en-têtes que vous incluez dans stdafx.h sont pré-traités pour gagner du temps lors des compilations ultérieures. Vous pouvez en savoir plus à ce sujet ici sur MSDN .

Si vous créez une application multiplate-forme, cochez l’option “Projet vide” lors de la création de votre projet et Visual Studio ne mettra aucun fichier dans votre projet.

Je viens de le rencontrer moi-même depuis que j’essaie de créer moi-même un framework sans système d’exploitation, mais j’ai commencé par créer une nouvelle option de programme Win32 dans Visual Studio 2017. “stdafx.h” est inutile et doit être supprimé. Ensuite, vous pouvez supprimer les stupides “stdafx.h” et “stdafx.cpp” qui se trouvent dans votre explorateur de solutions, ainsi que les fichiers de votre projet. A sa place, vous devrez mettre

 #include  

au lieu.