Qu'est-ce que “stdafx.h” utilisé dans Visual Studio?
Un fichier nommé stdafx.h
est automatiquement généré lorsque je commence un projet dans Visual Studio 2010. J'ai besoin de faire un cross-platform C++ de la bibliothèque, donc je n'ai pas/ne pouvez pas utiliser ce fichier d'en-tête.
Qu'est-ce que stdafx.h
utilisé pour? Est-il correct que je viens de supprimer ce fichier d'en-tête?
- Si j'obtiens le message d'erreur de compilation liées à stdafx.h, en général, je régler les paramètres de façon à ne pas créer ou utiliser ce fichier..
- Article: StdAfx.h pour les Novices - viva64.com/en/b/0265
- Vous pouvez utiliser le fichier d'en-tête très bien sur d'autres plates-formes, pour eux, est un fichier d'en-tête. Il juste n'offre aucun avantage en matière de performances de là.
Vous devez vous connecter pour publier un commentaire.
Tous les compilateurs C++ ont un grave problème de performances à traiter. La compilation de code C++ est un processus long et lent.
Compilation des en-têtes inclus au-dessus des fichiers C++ est un très processus long et lent. 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 processus long et lent. 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 en la désignation d'un en-tête spécial de fichier comme 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 une
#include "stdafx.h"
, avant de tout contenu significatif (à peu près la seule chose autorisée avant que ses commentaires).Dans ces conditions, au lieu 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 lastdafx.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.
Noter 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.
#include "stdafx.h"
? Bien sûr, mais c'est juste une norme de #include. Le "MS" extension de partie est tout simplement un compilateur d'optimisation de la performance; elle ne change pas la sémantique d'avoir un fichier d'en-tête qui arrive à être appelé "stdafx.h". Notez que si vous supprimez le comprennent et votre code dépend de tout ce qui a été inclus par l'intermédiaire de stdafx.h, vous allez avoir à inclure directement.#include
dans le fichier source (fait par le même "préprocesseur" étape qui évalue les macros). Le total de fichiers est ensuite transmis à la véritable compilateur, qui ne voit jamais un fichier d'en-tête comme une entité distincte. Vous ne mettez qu'déclarations sur le fichier d'en-tête parce que c'est ce qui fonctionne bien sur un fichier d'en-tête - c'est un classique de la règle. L'essayer! Créer un fichier d'en-tête avec tout un programme, puis de créer un fichier source qui n'a qu'un #include pour elle. Il compile bien.#pragma once
?"): Aucun. Les en-têtes précompilés et#pragma once
sont orthogonaux concepts. En-tête précompilé est une option de compilation optimisation de la performance qui fait aucun changement à la sémantique du code source.#pragma once
modifie la sémantique d'un fichier inclus, de sorte qu'il peut être inséré à plusieurs reprises dans une unité de compilation et il ne vous prendra effet au premier point d'insertion. Aucun rapport.info gcc
et le nœudPrecompiled Headers
qui vous informe de leur construction, y compris le leur, et de la façon de construire et d'utiliser différents debug et release construire des versions dans un répertoire. Ou voir gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.htmlC'est un "fichier d'en-tête précompilé" - tous les en-têtes de vous inclure dans stdafx.h sont pré-traités pour gagner du temps pendant les compilations suivantes. Vous pouvez en lire plus à ce sujet ici sur MSDN.
Si vous êtes en train de construire une application multiplate-forme, cochez la case "projet Vide" lors de la création de votre projet et de Visual Studio ne vais pas mettre tous les fichiers dans votre projet.
"Stdafx.h" est un en-tête précompilé.Il inclure le fichier pour le système standard d'inclure des fichiers et de projets spécifiques à inclure des fichiers qui sont utilisés fréquemment, mais sont changés fréquemment.ce qui réduit le temps de compilation et Inutiles de Traitement.
D'en-Tête précompilé stdafx.h est essentiellement utilisé dans Microsoft Visual Studio qui permet au compilateur de savoir les fichiers qui sont une fois compilé et pas besoin de le compiler à partir de zéro.
Vous pouvez en lire plus à ce sujet
http://www.cplusplus.com/articles/1TUq5Di1/
https://docs.microsoft.com/en-us/cpp/ide/precompiled-header-files?view=vs-2017
Je viens de tomber sur moi-même depuis que je suis en train d'essayer de créer moi-même un os à nu le cadre mais commencé par la création d'un nouveau Programme Win32 option dans Visual Studio 2017. "stdafx.h" est inutile et doit être supprimé. Ensuite, vous pouvez supprimer le stupide "stdafx.h" et "stdafx.cpp" c'est dans votre Explorateur de solutions ainsi que les fichiers de votre projet. À sa place, vous aurez besoin de mettre
à la place.