总是听闻do...while(0)有妙用,但一直不曾去了解,今日得缘偶见,其可替代功能复杂的宏。
effective c++的第一个条例就是用enum,const,union等代替define,为什么define如此令人闻之色变呢?
#define f(x,y) x*y的原意是简化调用,当x,y是数字或变量时无碍,但当其是表达式时则相去甚远。
例如: f(3,5),这是=符合我们初衷,但若f(a+b,c+d)呢,结果就会成为a+b*c+d。
如此便要用到do...while(0)
#define f(x,y)\
do{\
x*y\
}while(0)\
当然以上这个例子弥足简单,似有杀鸡焉用牛刀之感,但若遇到大型项目,逢临复杂的宏,以此方能以无厚入有间。