Con los corchetes, toda la cadena de reemplazo es un todo y no se producirán errores cuando participe en otras operaciones.
Por ejemplo, desde la perspectiva del lenguaje informático:
Definimos dos macros, MUL1 y MUL2. Cada uno tiene dos parámetros, A y B. Su función es multiplicar A y B.
La definición es la siguiente:
#Define MUL1(a, b) a*b
#Define MUL2 (a, b) ((a)*(b))
Ahora los usamos para reemplazar los casos a = 2 y b = 3:
MUL1(2, 3 ) El resultado de la sustitución se convierte en el resultado de la operación 2*3: 6 [resultado correcto].
El resultado de sustitución de MUL2(2,3) se convierte en ((2)*(3)) resultado de la operación: 6[resultado correcto]
Ahora los usamos para reemplazar a = 2 + 1 y b = 3+2:
El resultado de reemplazo de MUL1 (2+1, 3+2) se convierte en resultado de la operación 2+1*3+2: 7 [resultado incorrecto, no es lo que queremos 】.
El resultado de reemplazo de MUL2 (2+1, 3+2) se convierte en ((2+1)*(3+2)) resultado de la operación: 15 [el resultado es correcto].
Como se puede ver en lo anterior, MUL1 no usa paréntesis, a veces el resultado es correcto y otras veces el resultado es incorrecto.
MUL2 utiliza paréntesis y el resultado siempre es correcto.
Por eso se incluyen los paréntesis.