傻瓜式宏
#define max(a,b) a>b?a:b
这个宏只是简单的替换,而避免不了运算符优先计算的顺序问问题
功能性宏 正确如下代码
#include<stdio.h>
#define MAX(a,b) ({\
__tpyeof(_a) =(a);\
__typyof(_b) =(b);\
_a>_b? _a:_b;\
})
#define P(func){
printf("%s = %d\n" ,#func,func); //这里的#代表完全字符串化
}
int main()
{
int a =7;
p(MAX(2,3));
p(5+MAX(2,3));
p(MAX(2,MAX(3,4)));
P(MAX(2,3>4 ? 3:4));
P(MAX(a++,6));
return 0;
}
gcc-E 直接可以看到展开的样子
结果: