Par ce que ca fait pas la meme chose.
Je m explique de facon simplifiee: SUPPR_EST va faire une action, alors que CEL_LIBRE va renvoyer une valeur.
On mets des crochets lorsque on veut inserer du code, pour etre sur que ca fonctionne partout:
- define INFO printf( " hello\n" ) ; printf( " world\n")
. ..
if( toto ! = 5 )
INFO;
La, ca va remplacer la macro par:
if( toto ! = 5 )
printf( " hello\n" ) ; printf( " world\n");
Ce qui fait que " world" sera tjs afficher. Pour resoudre ce probleme, on rajoute des crochets.
Pour les parentheses, c est la meme chose:
- define CARRE(x) x*x
. ..
int a = CARRE(2+3);
ca va devenir
int a = 2+3*2+3; / / == 11 et non pas 25
Si tu mets des parentheses:
- define CARRE(x) ( (x)*(x))
int a = ( (2+3)*(2+3)); / / == 25