Waarvoor wordt stdafx.h gebruikt in Visual Studio?

Een bestand met de naam stdafx.hwordt automatisch gegenereerd wanneer ik een project start in Visual Studio 2010. Ik moet een platformonafhankelijke C++-bibliotheek maken, dus ik kan/kan deze niet gebruiken dit header-bestand.

Waar wordt stdafx.hvoor gebruikt? Mag ik dit headerbestand gewoon verwijderen?


Antwoord 1, autoriteit 100%

Alle C++-compilers hebben te maken met één serieus prestatieprobleem. Het compileren van C++-code is een lang, langzaam proces.

Het compileren van headers bovenop C++-bestanden is een erglang, langzaam proces. Het samenstellen van de enorme headerstructuren die deel uitmaken van Windows API en andere grote API-bibliotheken is een zeer, zeerlang, langzaam proces. Om het steeds opnieuw en opnieuw te moeten doen voor elk afzonderlijk Cpp-bronbestand is een doodsklok.

Dit is niet uniek voor Windows, maar een oud probleem van alle compilers die moeten compileren tegen een grote API zoals Windows.

De Microsoft-compiler kan dit probleem verhelpen met een simpele truc genaamd voorgecompileerde headers. De truc is behoorlijk gelikt: hoewel elk CPP-bestand potentieel en juridisch een iets andere betekenis kan geven aan de reeks headerbestanden die bovenop elk Cpp-bestand zijn opgenomen (door dingen zoals het hebben van verschillende macro’s #define’d voorafgaand aan de include, of door de koppen in een andere volgorde op te nemen), is dat meestal niet het geval. Meestal hebben we tientallen of honderden opgenomen bestanden, maar ze zijn allemaal bedoeld om dezelfde betekenis te hebben voor alle Cpp-bestanden die in uw toepassing worden gecompileerd.

De compiler kan enorm veel tijd besparen als hij niet elke keer opnieuw hoeft te beginnen met het compileren van elk Cpp-bestand plus de tientallen omvat letterlijk helemaal opnieuw.

De truc bestaat uit het aanwijzen van een speciaal header-bestand als het startpunt van alle compilatieketens, het zogenaamde ‘voorgecompileerde header’-bestand, dat gewoonlijk een bestand is met de naam stdafx.h, gewoon om historische redenen .

Vermeld eenvoudig al uw grote, grote headers voor uw API’s in uw stdafx.h-bestand, in de juiste volgorde, en begin vervolgens elk van uw CPP-bestanden helemaal bovenaan met een #include "stdafx.h", vóór enige zinvolle inhoud (zo ongeveer het enige dat ervoor mag zijn opmerkingen).

Onder die omstandigheden begint de compiler, in plaats van van nul af aante beginnen, met het compileren van de reeds opgeslagen resultaten van het compileren van alles in stdafx.h.

Ik geloof niet dat deze truc uniek is voor Microsoft-compilers, en ik denk ook niet dat het een originele ontwikkeling was.

Voor Microsoft-compilers wordt de instelling die het gebruik van voorgecompileerde headers regelt bepaald door een opdrachtregelargument voor de compiler: /Yu "stdafx.h". Zoals je je kunt voorstellen, is het gebruik van de bestandsnaam stdafx.hgewoon een conventie; u kunt de naam desgewenst wijzigen.

In Visual Studio 2010 wordt deze instelling beheerd vanuit de GUI door met de rechtermuisknop op een CPP-project te klikken, ‘Eigenschappen’ te selecteren en te navigeren naar “Configuratie-eigenschappen\C/C++\Precompiled Headers”. Voor andere versies van Visual Studio is de locatie in de GUI anders.

Merk op dat als je voorgecompileerde headers uitschakelt (of je project door een tool laat lopen die ze niet ondersteunt), dit je programma niet illegaal maakt; het betekent gewoon dat je tool elke keer alles vanaf het begin zal compileren.

Als je een bibliotheek aan het maken bent zonder Windows-afhankelijkheden, kun je gemakkelijk commentaar geven op of #includes verwijderen uit het bestand stdafx.h. Het is niet nodig om het bestand op zich te verwijderen, maar u kunt dit natuurlijk ook doen door de bovenstaande precompileerkopinstelling uit te schakelen.


Antwoord 2, autoriteit 6%

Het is een “voorgecompileerd headerbestand” — alle headers die u opneemt in stdafx.h worden vooraf verwerkt om tijd te besparen tijdens volgende compilaties. Je kunt er hier op MSDNmeer over lezen.

Als je een platformonafhankelijke applicatie bouwt, vink dan “Leeg project” aan bij het maken van je project en Visual Studio zal helemaal geen bestanden in je project plaatsen.


Antwoord 3

“Stdafx.h” is een voorgecompileerde header. Het include-bestand voor standaard systeem include-bestanden en voor projectspecifieke include-bestanden die vaak worden gebruikt maar niet vaak worden gewijzigd. Dit vermindert de compileertijd en onnodige verwerking.

Vooraf gecompileerde header stdafx.h wordt in principe gebruikt in Microsoft Visual Studio om de compiler te laten weten welke bestanden eenmaal zijn gecompileerd en deze niet helemaal opnieuw hoeven te worden gecompileerd.
Je kunt er meer over lezen

http://www.cplusplus.com/articles/1TUq5Di1/

https://docs .microsoft.com/en-us/cpp/ide/precompiled-header-files?view=vs-2017


Antwoord 4

Definitie:“Stdafx.h” is een voorgecompileerde koptekst.

  • Voorgecompileerd betekent dat eenmaal gecompileerd niet opnieuw hoeft te worden gecompileerd.
  • stdafx.h wordt in principe gebruikt in Microsoft Visual
    Studio
    om de compiler te laten weten dat de bestanden eenmaal zijn gecompileerd en
    het is niet nodig om het helemaal opnieuw te compileren.

Bijvoorbeeld:
Als u de onderstaande Windows-headerbestanden opneemt.

Code:

#include <windows.h>
#include <string.h>
int main()
{
 //your code
return 0;
}
  • De compiler zou deze header-bestanden altijd helemaal opnieuw compileren.
  • Maar als je #include “stdafx.h” voor deze headers opneemt, dan is de
    compiler vindt de gecompileerde header-bestanden van stdafx.h en doet
    niet helemaal opnieuw compileren.
  • Voor de allereerste keer compileert de compiler zoals normaal vanaf het begin.

Code:

#include "stdafx.h"
#include <windows.h>
#include <string.h>
int main()
{
//your code
 return 0;
}

Voordelen:

  • Verkort de compileertijd.
  • Vermindert onnodige verwerking.

Bron: http://www.cplusplus.com/articles/1TUq5Di1/


Antwoord 5

Ik ben hier zelf net tegenaan gelopen sinds ik mezelf een eenvoudig kader probeer te maken, maar begon met het maken van een nieuwe Win32-programmaoptie in Visual Studio 2017. “stdafx.h” is niet nodig en moet worden verwijderd. Dan kunt u de stomme “stdafx.h” en “stdafx.cpp” die in uw Solution Explorer staan, evenals de bestanden van uw project verwijderen. In zijn plaats moet je

#include <Windows.h>

in plaats daarvan.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes