#define CARRE(a) a * aune occurrence de
CARRE(a+b)
aura comme expansion a+b * a+b
ce qui est différent du (a+b) * (a+b)
qui était désiré.
De la même manière !CARRE(x)
aura comme expansion !x * x
ce qui est différent du !(x * x)
qui était désiré.
On recommande donc de toujours respecter deux règles dans la définition d'une macro devant être utilisée dans des expressions :
#define CARRE(a) ((a) * (a))