Domanda

Ogni file deve farlo #include "stdafx.h" Quando si usano intestazioni precompilate? O fare solo i file di origine devono includerlo.

EDIT: Inoltre, il mio file di intestazione precompilato #includes Molte intestazioni STL. Ma, nelle mie intestazioni, a volte ho funzioni che ritornano std::vector o qualcosa del genere, quindi ho bisogno #include <vector> comunque. È peggio che includere stdafx.h? Devo includere le definizioni per il mio framework di test unitari.

È stato utile?

Soluzione

Ogni file di origine deve includerlo prima di qualsiasi linea di non commento. Le intestazioni non devono includerlo, poiché ogni file di origine lo includerà prima di qualsiasi altra intestazione.

Altri suggerimenti

È possibile impostare se si desidera utilizzare un file di intestazione precompilato o meno a livello di progetto o a livello di file. Per l'impostazione del progetto, visitare la finestra di dialogo Proprietà del progetto e fare clic su Proprietà di configurazione / C / C ++ / Teste precompilate. Esiste un'opzione per creare/utilizzare un'esatta precompilata. È possibile sovrascrivere l'impostazione del livello di progetto su ciascun file .cpp impostando la stessa opzione nella finestra di dialogo Proprietà file.

Tutti i file C/C ++ devono avere l'intestazione precompilata in alto sì, se impostato per quel progetto. Ma puoi averlo spento/On per file C/C ++ (cosa ha detto Kei).

Se hai intestazioni standard da includere, posizionarle tutte nell'intestazione precompilata. Quindi vuoi averne bisogno nei file di intestazione normale (.h). Finché tutti i progetti e i file utilizzano intestazioni precompilate.

Come altri hanno detto, solo i file di origine devono includere l'intestazione precompilata. Aggiungerei solo che, secondo me, il codice dovrebbe compilare correttamente con o senza testate precompilate. Per raggiungere questo obiettivo, le intestazioni dovrebbero essere autonome e non fare affidamento sui file di origine, comprese le altre intestazioni richieste. Vedo un'intestazione precompilata solo come un modo per accelerare la compilazione e non come un deposito di tutte le intestazioni usate in un progetto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top