gpt4 book ai didi

c - 在非 Debug模式下运行时是否会跳过断言?

转载 作者:行者123 更新时间:2023-11-30 14:37:30 24 4
gpt4 key购买 nike

我想知道当我构建程序并在 header 之前声明 #define NDEBUG 时,断言实际上会发生什么。

它在执行时会跳过该行代码吗?或者用这个断言做点什么?

示例:

#define NDEBUG
#include<assert.h>

int main() {

int i = 5;

assert(i == 6);

return 0;
}

如果程序员做错了什么,我想在调试时查看断言,但是当我将代码作为最终构建运行时,我只想跳过带有断言的行。我的意思是不要减慢程序速度。

编辑:

好吧,我意识到宏是如何像函数一样工作的。可爱

最佳答案

来自2018年C标准,7.2 1:

The header <assert.h> defines the assert and static_assert macros and refers to another macro, NDEBUG which is not defined by <assert.h>. If NDEBUG is defined as a macro name at the point in the source file where <assert.h> is included, the assert macro is defined simply as:

#define assert(ignore) ((void)0)

The assert macro is redefined according to the current state of NDEBUG each time that <assert.h> is included.

总而言之,如果 NDEBUG定义后,assert maro 将不会产生运行时效果。 (在编译过程中,它确实在语法中占有一席之地;您应该在它后面跟一个分号以形成完整的表达式语句,然后基本上会忽略它。)

关于c - 在非 Debug模式下运行时是否会跳过断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57277508/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com