关于宏定义的形式

 

1.#define DUMP_WRITE(addr,nr) memcpy(bufp,addr,nr); bufp += nr;
2.#define DUMP_WRITE(addr,nr) {memcpy(bufp,addr,nr); bufp += nr;}
3.#define DUMP_WRITE(addr,nr) do { memcpy(bufp,addr,nr); bufp += nr; } while(0)

为什么要用第三种do-while的形式最好?

 

看看嵌入下面的代码中会出现什么问题:

if (addr)
    DUMP_WRITE(addr,nr);
else
    do_something_else();


 

第一种定义经过预处理后变成这样,导致编译出错:

if (addr)
    memcpy(bufp,addr,nr);bufp += nr;
else
    do_something_else();

 

那么又问了,我定义成第二种不就行了吗?可是还是编译不过:

if (addr)
    {memcpy(bufp,addr,nr);bufp += nr;}; //语法错误,多了一个分号
else
    do_something_else();

 

第三种在任何情况下都不会有问题:,

 

if (addr)
    do { memcpy(bufp,addr,nr); bufp += nr; } while(0)
else
    do_something_else();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值