5
考虑变量宏宏扩展以下Ç(忽略双副作用的问题):与参数与具有相同名称
#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 manual说:
类似函数的宏只有在它的名字出现时带有一对括号后才被展开。如果你只是写出这个名字,那么它就被单独留下了。
这是标准化还是只是按照惯例做的事情?
我很困惑。它看起来像海湾合作委员会荣幸的最大宏,并没有改为调用真正的最大功能。 – octopusgrabbus
@octopusgrabbus:什么'max'功能? –
发现了GCC手册中的相关部分,但我仍然不知道这是标准化还是非正式的约定 – mensi