do{}while(0)实现宏定义
在定义宏尤其是定义多语句宏时,经常会看见如下定义:
#define compute(a,b) do {add(a,b);sub(a,b);} while(0)
这样定义的宏有2个好处,它可以不受大括号、分号的影响,不论在什么情况下使用宏,宏都可以按照定义者的原本设计运行而不会出错;同时可以避免出现空的宏定义。
1 在定义多语句宏时,经常会出现分号导致运行结果出错的情况,如下所示:
#define compute(a,b) add(a,b);sub(a,b);
if(c ==1)
compute(a,b);
经过预处理后,上述代码变成:
if(c ==1)
add(a,b);sub(a,b