宏里面的(void)0

在《c标准库》实现assert.h中有一个语句:

#define assert(test)  ((test)?(void)0 : _Assert(__FILE__":"_STR(__LINE__)" " #test))

其他都理解,就是为啥0还要用void强转一下?

经过一番查阅,原来:给0加void强转,主要的目的是防止该宏被当作右值使用。

比如:

int result=assert(test)

如果assert(test)中test为真,返回(void)0,编译器就会因类型不匹配(int和哦void)而报错。

原来, 宏里面这样用的目的是防止该宏被用作右值, (void)0 本身也不能作右值, 因为 void 非实际的类型!

转载于:https://www.cnblogs.com/litifeng/p/7691473.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值