Intestazioni precompilate

Ho un progetto di esempio (non il mio) che è in Visual C ++ 6. Sto provando a convertirlo in Visual Studio 2008.

Il progetto precedente utilizza intestazioni precompilate. Ora le domande sono:

  1. Cosa sono le intestazioni precompilate?

  2. Poiché il progetto precedente utilizza intestazioni precompilate. Li userò anche in Visual Studio 2008 (il nuovo progetto). Ma ricevo errori dicendo “Hai dimenticato di includere stdafx.h” , per ovviare al problema, includo “stdafx.h” in ogni file sorgente. Ha funzionato perfettamente. Ma il vecchio progetto non includeva “stdafx.h” in ogni file? Quindi, come posso opt-out per includere “stdafx.h” in ogni file sorgente. Perché non tutti i file sorgente hanno bisogno dei file di inclusione definiti in “stdafx.h”, solo pochi lo fanno. Come è fatto?

EDIT: COME POSSO ESCLUDERE ALCUNI FILE DALL’USO DELL’INTESTAZIONE PRECOMPILATA?

Cosa sono le intestazioni precompilate?

Spesso i file di origine C ++ includono intestazioni da librerie esterne. In Windows includi windows.h . Questi file di intestazione possono essere molto grandi e richiedono un po ‘di tempo per l’elaborazione. Ogni volta che si compila un file C ++, il compilatore deve leggere ed elaborare migliaia di righe da questi file di intestazione. Ma le librerie esterne non cambiano ed è ansible risparmiare molto tempo se si elaborano questi file solo una volta e si salva il risultato.

Un’intestazione precompilata è semplicemente un gruppo di file di intestazione che sono stati elaborati in un modulo intermedio che in seguito può essere utilizzato dal compilatore ancora e ancora.

Intestazioni precompilate in Visual C ++

In Visual C ++ è consuetudine #include tutti i file di intestazione non modificabili in stdafx.h . Quindi istruisci il compilatore per creare l’intestazione precompilata stdafx.pch durante la compilazione di stdafx.cpp che non fa altro che includere stdafx.h . Se si desidera utilizzare l’intestazione precompilata in un altro file .cpp , è necessario includere stdafx.h come primo file di inclusione e istruire il compilatore a utilizzare stdafx.pch per l’intestazione precompilata.

Se si verifica un errore riguardo a non includere stdafx.h è sufficiente istruire il compilatore a non utilizzare un’intestazione precompilata per quel particolare file sorgente. (Oppure puoi includere stdafx.h .)

Impostazioni di intestazione precompilate per singoli file sorgente

Visual C ++ ti consente di controllare le impostazioni del compilatore per l’intero progetto e per i singoli file. Per accedere a singole proprietà, selezionare il file sorgente in Esplora soluzioni, fare clic con il pulsante destro del mouse e selezionare Proprietà dal menu di scelta rapida. Le opzioni per le intestazioni precompilate si trovano in Configuration Properties => C / C ++ => Intestazioni precompilate . Se si modificano queste impostazioni, si vorrà farlo spesso per tutte le configurazioni (es. Debug e Release ).

Quando si utilizzano le intestazioni precompilate, si avrà un’impostazione per l’intero progetto che indica al compilatore di utilizzare stdafx.pch per l’intestazione precompilata. Lo stdafx.cpp avrà una singola impostazione che indica al compilatore di generare stdafx.pch , e se hai alcuni file sorgente che non includono stdafx.h puoi impostare le singole impostazioni su questi per non usare le intestazioni precompilate.

Quando compili il codice, il compilatore deve cercare in tutti gli header #inclusi per sapere come compilare il codice nel tuo file .cpp.

Con i progetti di grandi dimensioni (o quelli che utilizzano librerie come MFC) queste intestazioni possono diventare enormi e quindi richiedere molto tempo per la compilazione.

Poiché la maggior parte di queste intestazioni non cambia spesso (se non mai), è ansible far sì che il compilatore li “precompilisca”, le elabora e salva il suo stato in un’intestazione precompilata. La prossima volta che compila, non ha bisogno di leggere e compilare di nuovo tutte quelle intestazioni, quindi è molto più veloce.

Un requisito in Visual Studio è che se si utilizza un’intestazione precompilata, deve essere inclusa in ogni file nel progetto.

Se il progetto è di piccole dimensioni o non lo si costruisce spesso, è sufficiente disabilitare l’opzione “intestazione precompilata” (nelle impostazioni del progetto, che si applica all’intero progetto). L’unico effetto che otterrai è che potrebbe compilare più lentamente. Oppure lascia l’opzione abilitata e aggiungi #include “stdafx.h” come prima inclusione in ogni file.

  1. Vedi MSDN
  2. Generalmente. è necessario includere “stdafx.h” in ogni file cpp. Il punto è che sono precompilati e non è necessario preoccuparsi che non tutti siano utilizzati in qualche file concreto.