Pourquoi stdafx.h fonctionne-t-il ainsi?

Comme d’habitude, quand mon cerveau joue avec quelque chose que je n’arrive pas à comprendre moi-même, je viens à vous pour demander de l’aide 🙂

Cette fois, je me demandais pourquoi stdafx.h fonctionnait ainsi. À ma connaissance, cela fait 2 choses:

  • Inclut les en-têtes standard que nous pourrions (?) Utiliser et qui sont rarement modifiés
  • Travaillez comme signet du compilateur lorsque le code n’est plus précompilé.

Maintenant, ces 2 choses me semblent deux tâches très différentes, et je me demande pourquoi elles n’ont pas fait deux démarches distinctes pour s’en occuper? Pour moi, il semble raisonnable d’avoir une commande # pragma qui effectue le bookmarking et éventuellement un fichier en-tête long des lignes de windows.h pour inclure les en-têtes fréquemment utilisés … Ce qui m’amène à mon prochain Point: Pourquoi sums-nous obligés d’inclure des en-têtes souvent utilisés dans stdafx.h? Personnellement, je ne connais pas d’en-têtes souvent utilisés que j’utilise pour lesquels je ne fais pas déjà mes propres inclus – mais peut-être que ces en-têtes sont nécessaires à la génération .dll?

Merci d’avance

stdafx.h est l’UNE des solutions permettant à Visual Studio de créer des en-têtes précompilés. C’est une approche simple à utiliser, facile à générer automatiquement, qui fonctionne bien pour les applications plus petites mais peut poser problème pour les applications plus grandes et plus complexes où le fait d’encourager efficacement l’utilisation d’un fichier d’en-tête unique peut provoquer un couplage entre des composants qui sont par ailleurs indépendants. Si vous l’utilisez uniquement pour les en-têtes système, cela a tendance à être correct, mais à mesure que la taille et la complexité d’un projet augmentent, il est tentant d’y insérer d’autres en-têtes. Toute modification soudaine d’un fichier d’en-tête entraîne la recompilation de tout ce qu’il contient.

Voir ici: Existe – t-il un moyen d’utiliser des en-têtes pré-compilés dans VC ++ sans nécessiter de stdafx.h? pour plus de détails sur une approche alternative.

Vous n’êtes pas obligé d’utiliser “stdafx.h”. Vous pouvez cocher les en-têtes précompilés dans les propriétés du projet (ou lors de la création du projet) et vous n’aurez plus besoin de stdafx.h .

Le compilateur l’utilise comme indice pour pouvoir précomstackr séparément les en-têtes les plus utilisés dans un fichier .pch afin de réduire le temps de compilation (il n’est pas nécessaire de le comstackr à chaque fois).

Il réduit le temps de compilation, car les éléments qu’il contient sont toujours compilés en premier (voir les détails dans la citation ci-dessous):

stdafx.h est un fichier qui décrit à la fois les fichiers d’inclusion standard spécifiques au système et aux projets, fréquemment utilisés mais rarement modifiés.

Des compilateurs compatibles précomstackront ce fichier afin de réduire les temps de compilation globaux. Visual C ++ ne comstackra rien avant le #include "stdafx.h" dans le fichier source , sauf si l’option de compilation /Yu’stdafx.h ‘est décochée (par défaut); cela suppose que tout le code de la source, y compris cette ligne, est déjà compilé.

Cela aidera à réduire les longues compilations.