2011-10-10 13 views
8

Qual è la differenza tra DEBUG e _DEBUG in vC++ in visual studio 2008. C'è qualche differenza perché nel mio progetto, in alcuni moduli il preprocessore è DEBUG e in alcuni moduli è _DEBUG.DEBUG vs _DEBUG

+0

Correlati: ['_DEBUG' vs' NDEBUG'] (http://stackoverflow.com/questions/2290509/) –

risposta

5

Nel proprio codice è possibile controllare qualsiasi macro desiderata, quindi non è importante quale utilizzare.

Ma le librerie utilizzate possono comportarsi diversamente. Per esempio. la documentazione MSDN sugli stati assert:

Le dichiarazioni di asserzione vengono compilate solo quando _DEBUG è definito. Quando _DEBUG non è definito, il compilatore considera le asserzioni come istruzioni nulle.

Quindi vorrei suggerire di utilizzare sempre _DEBUG.

Edit: Secondo MSDN che non hanno nemmeno bisogno di definire qualsiasi macro speciale di debug perché il compilatore lo farà per voi, non appena si specifica una libreria di debug di runtime.

2

In realtà dipende da quale utilizzo macro è definito. Poiché so che il progetto VS2008 C++ predefinito contiene _DEBUG da definire per la configurazione di debug. Potrebbe capitare che nel tuo progetto ci sia anche una macro DEBUG personalizzata. Prova a cercare la definizione DEBUG.

Per impostazione predefinita è necessario utilizzare sempre _DEBUG.

1

Se l'impostazione Codegeneration del progetto è qualsiasi cosa con "debug", quindi la macro _DEBUG viene definita dal compilatore. I corrispondenti opzioni compilatore sono /MDd DLL multithread, collegamento dinamico a libc, DEBUG /MLd thread singolo, il collegamento statico a libc, DEBUG (VC6) /MTd Multithreaded, collegamento statico a libc, DEBUG

L' l'opzione del compilatore/LDd definisce anche la macro _DEBUG.

La macro DEBUG viene spesso definita in modo esplicito in Debug-Project-Setting.