分类: C/C++
2013-09-04 15:26:32
原文地址:pr_debug宏的实现的学习 作者:asweisun_shan
|
关于这段代码学习两个技巧:
1.do{ func1_call();func2_call(); }while(0);
好处:
这是个空操作,并且这样编译时不会出现警告。
由于使用宏就如同使用函数一般,必须在最后添加一个“;”,即像如下的方法使用:
pr_debug(“error: write a file.”); 这样宏定义中只能用do{} while(0),而不能直接使用{}来构成一个代码块。
2.({if (0) func_call(); 0; })
不可以。因为这样编译时会有警告:变量未使用。
为了使这个代码段的返回值为0.
注意:#define swap(a, b) {int tmp; tmp = b; b = a; a = tmp;}
c=wap(a,b);是没有返回值的,c=0;
而:#define swap(a, b) ({int tmp; tmp = b; b = a; a = tmp;})
则c=wap(a,b);是有返回值的,就是{}中最后语句的值,c=a;