008_C标准库函数之<assert.h>

这个头文件里,只有一个函数(实际是一个宏函数),那就是void assert(int exp);函数,那么这个函数到底是干什么用的呢?我们来聊聊,聊之前我们先认识并使用(学习)下此函数,如下:

【宏函数:assert 】


【格式】

void assert(int exp);

【功能】

assert宏用于为程序增加诊断功能。当assert(exp)执行时,如果exp为0,则在标准出错输出流stderr输出一条如下所示的信息:

Assertion failed: expression, file filename, line nnn

然后调用abort终止执行。其中的源文件名filename和行号nnn来自于预处理宏__FILE__和__LINE__。

如果<assert.h>被包含时定义了宏NDEBUG,那么宏assert被忽略

【入参】

int exp:一个int类型的入参,若为0则表示程序段出错了

【返回值】

void类型的空返回,也就是没有返回值

【test_code】

我们可以发现,当exp入参不为0时,此时程序可以正常往下走,并未退出哦

再看下面一段代码:

当运行此段代码后,会弹窗出来错误,点击“中止”就行,然后我们可以看到打印出来对应的.c位置和assert所在的代码行数

来,我们再来看一段代码,如下:

我们发现,好像assert失去了作用哦,这就是:如果<assert.h>被包含时定义了宏NDEBUG,那么宏assert被忽略

这个是要在assert.h之前定义哦,才会使assert无效

【总结】

好滴,我们现在知道了assert就是一个调试诊断的宏函数,特点如下:

1.assert 只有在 Debug 版本中才有效,如果编译为 Release 版本则被忽略。

2.频繁的调用会极大的影响程序的性能,增加额外的开销,所以建议尽量少使用

3.每个assert只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败

4.assert是一个宏,而非函数

5.在调试结束后,可以通过在包含 #include 的语句之前插入 #define NDEBUG 来禁用 assert 调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值