次の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マニュアルには次のように書かれています。
関数のようなマクロは、その名前の後に括弧のペアが付いている場合にのみ展開されます。名前だけを書くとそのままになります
これは標準化されたものですか、それとも慣例によって行われたものですか?