当宏NDEBUG
被定义为"非调试"时,标准C assert 宏将被禁用。这会导致双重否定的情况,例如#ifndef NDEBUG //DebuggingCode #endif
。看起来"RELEASE"可能是更好的选择,但我不相信标准委员会没有理由这样做....
当宏NDEBUG
被定义为"非调试"时,标准C assert 宏将被禁用。这会导致双重否定的情况,例如#ifndef NDEBUG //DebuggingCode #endif
。看起来"RELEASE"可能是更好的选择,但我不相信标准委员会没有理由这样做....
NDEBUG
宏控制assert
的行为。
通常情况下,不应将其用于其他任何事情。如果您将其用于其他事情(如额外的调试跟踪输出),则无法选择构建没有此额外代码但启用断言的应用程序选项。
我建议您定义自己的预处理器符号,例如MY_TRACE,并使用它。还要将其定义为0
或1
,并使用#if MY_TRACE
。这样,如果您配置编译器在预处理器表达式中使用未初始化变量时发出警告,就可以捕获使用该符号但未正确初始化的文件。
assert
,那么你永远不需要编写 #ifndef NDEBUG
。 - Lindydancerassert
来追踪一个罕见的难以复现的错误,但又不想在各个地方输出成千上万行的调试信息时,该怎么办? - R.. GitHub STOP HELPING ICENASSERT
呢?NDEBUG
对我来说意味着“没有调试”。在我看来,NDEBUG
应该包括应用程序中的所有调试输出。然后,如果您想要打开某些特殊的输出,可以使用额外的宏。定义一千个非标准宏来摆脱自定义的调试级别似乎不是很方便... - mip具有宏释放(RELEASE)意味着代码已准备好分发,但实际上可能没有准备好。另一方面,NDEBUG则意味着调试已完成,因此可以进行测试。
我还认为关闭某些功能比确保打开所有功能要好。这就是为什么大多数操作系统(例如)在许多人不需要时都开启了大部分功能的原因。
以上仅是我的个人想法。
NDEBUG
指的是无调试。RELEASE
可能意味着更多。 - cnicutar