在发布模式下是否会忽略断言(false)?

发布于 2024-07-08 16:14:39 字数 58 浏览 11 评论 0原文

我用的是VC++。 在发布模式下是否会忽略 assert(false)

I am using VC++. Is assert(false) ignored in release mode?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

早乙女 2024-07-15 16:14:39

如果在发布模式下编译包括定义 NDEBUG,那么可以。

请参阅断言 (CRT)

If compiling in release mode includes defining NDEBUG, then yes.

See assert (CRT)

放赐 2024-07-15 16:14:39

IIRC,assert(x) 是一个宏,当定义 NDEBUG 时,其计算结果为空,这是 Visual Studio 中发布版本的标准。

IIRC, assert(x) is a macro that evaluates to nothing when NDEBUG is defined, which is the standard for Release builds in Visual Studio.

明媚殇 2024-07-15 16:14:39

断言宏(至少它通常是一个宏)通常在发布代码中定义为无操作。 它只会在调试代码中触发。 话说回来。 我曾在定义自己的断言宏的地方工作过,它在调试和发布模式下触发。

我被教导要对“永远”不会为假的条件使用断言,例如函数的前提条件。

The assert macro (at least it is typically a macro) is usually defined to no-op in release code. It will only trigger in debug code. Having said that. I have worked at places which defined their own assert macro, and it triggered in both debug and release mode.

I was taught to use asserts for condition which can "never" be false, such as the pre-conditions for a function.

垂暮老矣 2024-07-15 16:14:39

我认为只有定义了 NDEBUG(对于 Visual C++ 应用程序来说,它是默认的)。

Only if NDEBUG is defined I think (which it will be by default for Visual C++ apps).

梦途 2024-07-15 16:14:39

我认为过度依赖断言的确切行为是错误的。 “assert(expr)”的正确语义是:

  • 表达式 expr 可能会或可能不会被计算。
  • 如果 expr 为 true,则正常继续执行。
  • 如果 expr 为 false,则发生的情况是未定义的。

更多信息请访问 http://nedbatchelder.com/text/assert.html

I think it is a mistake to rely too much on the exact behavior of the assert. The correct semantics of "assert(expr)" are:

  • The expression expr may or may not be evaluated.
  • If expr is true, execution continues normally.
  • If expr is false, what happens is undefined.

More at http://nedbatchelder.com/text/assert.html

兲鉂ぱ嘚淚 2024-07-15 16:14:39

GNU 也一样:

  #ifdef    NDEBUG

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

same for GNU :

  #ifdef    NDEBUG

  # define assert(expr)     (__ASSERT_VOID_CAST (0))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文