2011-10-10 9 views
8

Cuál es la diferencia entre DEBUG y _DEBUG en vC++ en visual studio 2008. Hay alguna diferencia porque en En mi proyecto, en algunos módulos el preprocesador es DEBUG y en algunos módulos está _DEBUG.DEBUG vs _DEBUG

+0

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

Respuesta

5

En su propio código puede verificar cualquier macro que desee, por lo que no importa cuál usar.

Pero las bibliotecas que usa pueden comportarse de manera diferente. P.ej. La documentación de MSDN acerca de assert indica:

Las declaraciones de aserción se compilan solo cuando se define _DEBUG. Cuando _DEBUG no está definido, el compilador trata las aserciones como declaraciones nulas.

Así que sugeriría utilizar siempre _DEBUG.

Editar: Según MSDN que no tienen ni siquiera para definir cualquier macro especial de depuración porque el compilador hará que tan pronto como se especifica una biblioteca de depuración en tiempo de ejecución.

2

Depende realmente del uso de la macro definido. Como sé por defecto, el proyecto VS2008 C++ contiene _DEBUG a definir para la configuración de depuración. Puede ocurrir que en su proyecto también haya una macro DEBUG personalizada definida. Intenta buscar la definición de DEPURACIÓN.

Por defecto, siempre debe usar _DEBUG.

1

Si la configuración de generación de código del proyecto es algo con "depuración", el compilador define la macro _DEBUG. Las opciones de compilación correspondientes son /MDd multiproceso DLL, la vinculación dinámica a libc, depurar /MLD Single-Threaded, la vinculación estática a libc, depurar (VC6) /MTd multiproceso, la vinculación estática a libc, DEBUG

El la opción compilador/LDd también define la macro _DEBUG.

La macro DEPUG se define a menudo explícitamente en la Configuración del proyecto de depuración.