Si consideri il seguente programma C (ignorare il numero doppio effetto collaterale):Macro di espansione per le macro con argomenti contro variabili con lo stesso nome
#define max(a, b) (a>b?a:b)
int main(void){
int max = max(5,6);
return max;
}
Il preprocessore GCC trasforma questo in:
int main(void){
int max = (5>6?5:6);
return max;
}
Che è molto bello, dal momento che non devi preoccuparti di collisioni involontarie tra max
e max()
. Il GCC manual dice:
Una macro simile a una funzione viene espansa solo se il suo nome appare dopo una coppia di parentesi. Se scrivi solo il nome, è rimasto solo
Questo standardizzato o solo qualcosa per convenzione?
Sono confuso. Sembra che gcc abbia onorato la macro massima e non abbia chiamato la funzione max reale. – octopusgrabbus
@octopusgrabbus: quale funzione 'max'? –
Trovato la parte rilevante nel manuale GCC, ma non so ancora se questo è standardizzato o solo una convenzione informale – mensi