sich das folgende C Programm (ignorieren Sie die Doppelnebeneffekt Ausgabe):Makroerweiterung für Makros mit Argumenten gegen Variablen mit dem gleichen Namen
#define max(a, b) (a>b?a:b)
int main(void){
int max = max(5,6);
return max;
}
Der GCC Präprozessor macht daraus:
int main(void){
int max = (5>6?5:6);
return max;
}
Das ist ganz nett, da Sie sich keine Gedanken über unbeabsichtigte Kollisionen zwischen max
und max()
machen müssen. Die GCC manual sagt:
Ein funktionsähnliches Makro wird nur erweitert, wenn sein Name mit einem Paar Klammern nach ihm erscheint. Wenn Sie nur den Namen schreiben, ist es allein
Ist dies standardisiert oder nur etwas durch Konvention gemacht?
Ich bin verwirrt. Es sieht so aus, als würde gcc das Max-Makro honorieren und stattdessen die echte Max-Funktion aufrufen. – octopusgrabbus
@octopusgrabbus: Was 'Max' Funktion? –
Gefunden den relevanten Teil in der GCC-Handbuch, aber ich weiß immer noch nicht, ob dies standardisiert oder nur eine informelle Konvention – mensi