考虑以下C程序(忽略双重副作用问题):
#define max(a, b) (a>b?a:b)
int main(void){
int max = max(5,6);
return max;
}
GCC 预处理器把它变成:
int main(void){
int max = (5>6?5:6);
return max;
}
这非常好,因为您不必担心 和 之间的意外max
碰撞max()
。GCC 手册说:
只有当它的名称后面带有一对括号时,才会展开类似函数的宏。如果你只写名字,它就会被单独留下
这是标准化的还是只是按惯例完成的?