定义_DEBUG时,不得定义NDEBUG

时间:2011-12-14 15:05:43

标签: visual-c++

我在创建.exe项目时遇到错误。错误是: 编译...

1>  KsmXmlXalan.cpp
1>c:\newdir\xalan-c-r786300\inc\xalanc\include\vcppdefinitions.hpp(73): fatal error C1189: #error :  NDEBUG must not be defined when _DEBUG is defined.
1>  KsmXmlJB.cpp
1>  KsmXml.cpp
1>c:\newdir\xalan-c-r786300\inc\xalanc\include\vcppdefinitions.hpp(73): fatal error C1189: #error :  NDEBUG must not be defined when _DEBUG is defined.
1>  KsmXalan.cpp
1>c:\newdir\xalan-c-r786300\inc\xalanc\include\vcppdefinitions.hpp(73): fatal error C1189: #error :  NDEBUG must not be defined when _DEBUG is defined.

即使我没有定义_DEBUG(在project-> properties-> C / C ++ - > Preprocessors->预处理器Definations中),但仍然会出现相同的错误。

任何人都可以指导我为什么会出现这个错误吗?

预先谢谢, 问候, Nagesh

2 个答案:

答案 0 :(得分:2)

当您针对“Debug”运行时库构建时,

_DEBUG始终由预处理器预定义。有关详细信息,请参阅MSDN库中的Predefined MacrosDebug Routines

NDEBUG传统上是在“发布”版本中定义的(除了assert()调用之外),但它不是由预处理器预定义的。

所以看起来你正在编译调试库,但也在某处定义了NDEBUG。两者同时定义可能是在寻找麻烦; vcppdefinitions.hpp 头文件正在检查并抛出错误。

答案 1 :(得分:0)

_DEBUG定义在某个地方。

你可以做一件简单的事情:

#ifdef _DEBUG
#undef _DEBUG
#define DEBUG_WAS_DEFINED
#endif

#include "vcppdefinitions.hpp"

//....

#ifdef DEBUG_WAS_DEFINED
#undef DEBUG_WAS_DEFINED
#define _DEBUG
#endif

将调试与非调试库混合时通常会发生错误。