在发布模式下是否会忽略断言(false)?
我用的是VC++。 在发布模式下是否会忽略 assert(false)
?
I am using VC++. Is assert(false)
ignored in release mode?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我用的是VC++。 在发布模式下是否会忽略 assert(false)
?
I am using VC++. Is assert(false)
ignored in release mode?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
如果在发布模式下编译包括定义 NDEBUG,那么可以。
请参阅断言 (CRT)
If compiling in release mode includes defining NDEBUG, then yes.
See assert (CRT)
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.
断言宏(至少它通常是一个宏)通常在发布代码中定义为无操作。 它只会在调试代码中触发。 话说回来。 我曾在定义自己的断言宏的地方工作过,它在调试和发布模式下触发。
我被教导要对“永远”不会为假的条件使用断言,例如函数的前提条件。
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.
我认为只有定义了 NDEBUG(对于 Visual C++ 应用程序来说,它是默认的)。
Only if NDEBUG is defined I think (which it will be by default for Visual C++ apps).
我认为过度依赖断言的确切行为是错误的。 “assert(expr)”的正确语义是:
更多信息请访问 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:
More at http://nedbatchelder.com/text/assert.html
GNU 也一样:
same for GNU :