在发布模式(VC++)中是否断言断言(false)?

Bri*_*ndy 24 c++ posix assert visual-c++

在释放模式(VC++)中是否忽略了assert(false)?

act*_*.se 26

如果在发布模式下编译包括定义NDEBUG,那么是.

断言(CRT)

  • 文档说明“断言例程在 C 运行时库的发布和调试版本中都可用。” 但是,查看 assert.h 头文件,在包含它之前定义 NDEBUG 肯定会导致 assert() 编译为无操作。但是,未定义 NDEBUG 的发布模式代码完全有可能导致断言中止。我只是想澄清我自己的理解并分享我的发现。 (2认同)

gri*_*eve 6

断言宏(至少通常是宏)通常在发布代码中定义为no-op.它只会在调试代码中触发.话说回来.我曾在定义自己的断言宏的地方工作,并在调试和发布模式下触发.

我被教导将断言用于"永不"假的条件,例如函数的前置条件.


Har*_*lby 5

IIRC的assert(x)是一个宏,在定义NDEBUG时,该宏的计算结果为空,这是Visual Studio中内部版本的标准。