在发布模式(VC ++)中是否忽略了assert(false)?
答案 0 :(得分:26)
如果在发布模式下编译包括定义NDEBUG,那么是。
请参阅assert (CRT)
答案 1 :(得分:5)
断言宏(至少通常是宏)通常在发布代码中定义为no-op。它只会在调试代码中触发。话说回来。我曾在定义自己的断言宏的地方工作,并在调试和发布模式下触发。
我被教导将断言用于“从不”假的条件,例如函数的前置条件。
答案 2 :(得分:4)
IIRC,assert(x)是一个宏,在定义NDEBUG时评估为空,这是Visual Studio中发布版本的标准。
答案 3 :(得分:2)
只有在定义NDEBUG时我认为(默认情况下它将是Visual C ++应用程序)。
答案 4 :(得分:1)
我认为过分依赖断言的确切行为是错误的。 “assert(expr)”的正确语义是:
答案 5 :(得分:0)
#ifdef NDEBUG
# define assert(expr) (__ASSERT_VOID_CAST (0))