Cosa è “stdafx.h” utilizzato in Visual Studio?

Un file denominato stdafx.h viene generato automaticamente all’avvio di un progetto in Visual Studio 2010. Devo creare una libreria C ++ multipiattaforma, quindi non posso / non posso usare questo file di intestazione.

A cosa serve stdafx.h ? Va bene che rimuovo questo file di intestazione?

Tutti i compilatori C ++ hanno un serio problema di prestazioni da affrontare. La compilazione del codice C ++ è un processo lungo e lento.

La compilazione delle intestazioni incluse nei file C ++ è un processo molto lungo e lento. La compilazione delle enormi strutture di intestazione che fanno parte dell’API di Windows e di altre librerie API di grandi dimensioni è un processo molto , molto lungo e lento. Devo farlo finita, e ancora e ancora per ogni singolo file sorgente Cpp è una campana a morto.

Questo non è univoco per Windows ma un vecchio problema affrontato da tutti i compilatori che devono compilare una grande API come Windows.

Il compilatore Microsoft può migliorare questo problema con un semplice trucco chiamato intestazioni precompilate . Il trucco è piuttosto scorrevole: sebbene ogni file CPP possa potenzialmente e legalmente dare un significato leggermente diverso alla catena di file di header inclusa in cima a ogni file Cpp (con cose come avere diversi macro # definirli prima degli include, o includendo le intestazioni in ordine diverso), il più delle volte non è il caso. La maggior parte delle volte, abbiamo dozzine o centinaia di file inclusi, ma tutti hanno lo scopo di avere lo stesso significato per tutti i file Cpp che vengono compilati nella tua applicazione.

Il compilatore può fare enormi risparmi di tempo se non deve iniziare a compilare ogni file Cpp più le sue dozzine di include letteralmente da zero ogni volta.

Il trucco consiste nel designare un file di intestazione speciale come punto di partenza di tutte le catene di compilazione, il cosiddetto file ‘intestazione precompilata’, che è comunemente un file chiamato stdafx.h semplicemente per ragioni storiche.

Elenca semplicemente tutte le tue enormi intestazioni per le tue API nel tuo file stdafx.h, nell’ordine appropriato, quindi avvia ciascuno dei tuoi file CPP in alto con un #include "stdafx.h" , prima di qualsiasi contenuto significativo (solo circa l’unica cosa consentita prima è commenti).

In queste condizioni, invece di partire da zero , il compilatore inizia a compilare dai risultati già salvati di compilare tutto in stdafx.h .

Non credo che questo trucco sia univoco per i compilatori Microsoft, né penso che sia stato uno sviluppo originale.

Per i compilatori Microsoft, l’impostazione che controlla l’utilizzo delle intestazioni precompilate è controllata da un argomento della riga di comando per il compilatore: /Yu "stdafx.h" . Come puoi immaginare, l’uso del nome del file stdafx.h è semplicemente una convenzione; puoi cambiare il nome se lo desideri.

In Visual Studio 2010, questa impostazione è controllata dalla GUI facendo clic con il pulsante destro del mouse su un progetto CPP, selezionando “Proprietà” e navigando in “Proprietà di configurazione \ C / C ++ \ Intestazioni precompilate”. Per le altre versioni di Visual Studio, la posizione nella GUI sarà diversa.

Nota che se disabiliti le intestazioni precompilate (o esegui il tuo progetto attraverso uno strumento che non le supporta), non rende il tuo programma illegale; significa semplicemente che il tuo strumento compilerà tutto da zero ogni volta.

Se stai creando una libreria senza dipendenze da Windows, puoi facilmente commentare o rimuovere #include dal file stdafx.h. Non è necessario rimuovere il file di per sé, ma è ansible farlo chiaramente, disabilitando l’impostazione dell’intestazione di precompilazione sopra.

È un “file di intestazione precompilato”: qualsiasi intestazione inclusa in stdafx.h viene preelaborata per risparmiare tempo durante le successive compilazioni. Puoi leggere maggiori informazioni qui su MSDN .

Se stai creando un’applicazione multipiattaforma, seleziona “Progetto vuoto” quando crei il tuo progetto e Visual Studio non inserirà alcun file nel tuo progetto.

Mi sono imbattuto in questo da solo perché sto cercando di crearmi una struttura nuda, ma ho iniziato creando una nuova opzione del programma Win32 in Visual Studio 2017. “stdafx.h” non è necessario e dovrebbe essere rimosso. Quindi puoi rimuovere lo stupido “stdafx.h” e “stdafx.cpp” che si trova nel tuo Solution Explorer e anche i file del tuo progetto. Al suo posto, dovrai metterlo

 #include  

anziché.