Tutti i compilatori C++ hanno un serio problema di prestazioni da affrontare. La compilazione del codice C++ è un processo lungo e lento.
Le intestazioni di compilazione incluse nei file C++ sono un molto lungo, processo lento. Compilare le enormi strutture di intestazione che fanno parte dell'API di Windows e di altre librerie API di grandi dimensioni è un molto, molto lento, processo. 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 API di grandi dimensioni 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 di designare un file speciale di intestazione 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.
Basta elencare tutte le tue enormi intestazioni per le tue API nel tuo file stdafx.h, nell'ordine appropriato, quindi avviare ciascuno dei tuoi file CPP in alto con uno #include "stdafx.h"
, prima di qualsiasi contenuto significativo (quasi l'unica cosa consentita prima sono i commenti).
In tali condizioni, anziché iniziare 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 spostandosi su "Proprietà di configurazione \ C/C++ \ Intestazioni precompilate". Per le altre versioni di Visual Studio, la posizione nella GUI sarà diversa.
Si noti che se si disabilitano le intestazioni precompilate (o si esegue il progetto tramite uno strumento che non le supporta), ciò non rende il programma illegale; significa semplicemente che il tuo strumento compilerà tutto da zero ogni volta.
Se si sta creando una libreria senza dipendenze Windows, si può facilmente commentare o rimuovere #include dal file stdafx.h. Non è necessario rimuovere il file di per sé, ma è possibile farlo chiaramente, disabilitando l'impostazione dell'intestazione di precompilazione sopra.
Se ottengo l'errore di compilazione relativo a stdafx.h, in genere imposto le impostazioni per non creare o utilizzare questo file .. – phoad
Mi chiedo sempre lo stesso - con un colpo forte e arrabbiato sul pulsante di ritorno! – Bitterblue
Articolo: StdAfx.h per Novizi - http://www.viva64.com/en/b/0265/ –