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

时间:2008-11-06 22:01:32

标签: c++ visual-c++

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

6 个答案:

答案 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)”的正确语义是:

  • 表达式expr可能会也可能不会被评估。
  • 如果expr为true,则执行正常。
  • 如果expr为false,则会发生什么是未定义的。

更多http://nedbatchelder.com/text/assert.html

答案 5 :(得分:0)

对于GNU来说同样如此:

  #ifdef    NDEBUG

  # define assert(expr)     (__ASSERT_VOID_CAST (0))