宏定义中的do{...}while(0);

宏定义中的do{…}while(0);

我们都知道do while循环,但是在宏定义中常常会出现do{…}while(0);的用法,这样的循环不是只执行一次吗?不用do while也可以实现相同的功能呀,那么为什么要使用do{…}while(0);呢?

我们先来分析几个例子:

#define fun(x) func1(x);func2(x)
if (true) 
    fun(x);

上述代码会展开成:

if (true)
    func1(x);
func2(x);

这和我们宏定义的意图不一样,因为我们想要在if语句里面执行func1和func2,而现在执行了func1。

你可能会问,这样在宏里面加上大括号{}不就行了吗?我们再来看看下面的例子:

#define fun(x) {func1(x);func2(x);}
if (true)
    fun(x);
else
    retrun 0;

上述代码会展开成:

if (true){
    func1(x);
    func2(x);
};
else
    return 0;

我们可以看到if…else…语句出现了语法错误。

将宏定义改为do{…}while(0);的形式:

#define fun(x) do{func1(x);func2(x);}while(0);
if (true)
    fun(x);
else
    return 0;

上述代码会展开成:

if (true)
    do{
        func1(x);
        func2(x);
    }while(0);
else
    return 0;

上述展开的代码无论从语法上还是逻辑上都没有错误了。总的来说,在宏定义中使用do{…}while(0);是为了在宏定义中使用多个语句块而不会受大括号和分号的影响。

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值