#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))