断言assert

断言就是声明某种东西应该为真。

assert的原型如下:

void assert(int expression)


当它被执行时,就对表达式进行测试,如果为假,则向标准错误打印一条诊断信息并终止程序。如果为真则继续执行程序。

断言使得调试程序变得容易,当程序调试完毕后,我们可以在编译时通过定义NDEBUG消除所有的断言。可以使用-DNDEBUG编译器命令行选项或者在源文件中头文件assert.h被包含前增加下面的这个定义:


#define NDEBUG


这样的为何能去掉代码中的断言呢?通过查看assert.h头文件发现:

#ifdef NDEBUG

#define assert(_Expression)     ((void)0)

#else  /* NDEBUG */

把assert()定义成了((void)0)

((void)0)其实就行一条空语句。这里,为什么不能这样:

#ifdef NDEBUG

#define assert(_Expression)     

#else  /* NDEBUG */


考虑下面的问题:

a = 1, assert(b == 1), c = 2;
// 变成这样 a = 1, , c = 2;

逗号表达式就出错了。因此空语句使用((void)0)更合适。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值