10

Ho letto la documentazione in MSDN, ma alla fine non ho avuto la chiara idea di quale sia la differenza pratica tra loro, esattamente. Entrambi sembrano richiedere che stdafx.h venga aggiunto all'inizio di ogni file * .cpp.Qual è la differenza tra "Crea intestazione precompilata" (/ Yc) e "Usa intestazione precompilata" (/ Yu) in Visual Studio?

Sto usando VS2008.

Qualcuno può aiutare a chiarire le cose?

+0

Un link alla documentazione potrebbe essere rilevante. La banale risposta assurda sarebbe: * una è usata per ** creare ** l'intestazione precompilata, l'altra per ** usare ** it * (cioè per fare in modo che il compilatore legga le intestazioni regolari e generi l'intestazione precompilata, l'altra per il compilatore non generare l'intestazione precompilata ma piuttosto usarla –

risposta

11

Bene, penso che tu debba prima capire lo scopo delle intestazioni precompilate. Nei progetti di grandi dimensioni, possono essere necessari anni per elaborare tutte le intestazioni richieste da una singola estensione client, ad esempio, così alcune persone preferiscono distribuire i file .pch insieme alle loro librerie. Per generare i file .pch, utilizzare il flag del compilatore /Yc e la persona che desidera utilizzare la libreria imposterà il flag /Yu. Vedi here e here per dettagli.

+0

Non si dovrebbero ottenere i file PCH da una libreria.Per una cosa, la maggior parte del codice utilizza più librerie, tuttavia il compilatore può leggere solo un PCH. le intestazioni utilizzate durante lo sviluppo della libreria sono probabilmente molto diverse da quelle necessarie al codice del consumatore –

+0

@BenVoigt In effetti, probabilmente non è una pratica comune. L'ho visto in un ambiente bancario strettamente sigillato, in cui la base di codice era enorme e le estensioni client erano strettamente derivate da materiale fornito da questa azienda.Si prega di sentirsi libero di suggerire una modifica se pensi che questa risposta abbia bisogno di miglioramenti –

21

Breve sintesi di come usare i file PCH in Visual Studio:

  • Tutti i file cpp nel progetto devono includere stdafx.h (è possibile modificare questo per qualcosa d'altro, se lo si desidera)
  • Select progetto in Solution Explorer e in Properties -> C++ -> Precompiled Headers impostare 'Crea/Usa intestazioni precompilate' su 'Usa'. Hit Applicare
  • Mentre le pagine delle proprietà sono ancora mostrati selezionare stdafx.cpp in Esplora soluzioni e impostare il valore a 'Crea'
+2

+1 Chiaro, semplice e al punto risposta. – CodeAngry