Macros en C y uso de argumentos entre paréntesis
Ejemplo
#define Echo(a) a
#define Echo(a) (a)
Me doy cuenta de que probablemente no haya una diferencia significativa aquí, pero ¿por qué querrías incluir el a
paréntesis dentro del cuerpo de la macro? ¿Cómo lo altera?
Aceptado
Supongamos que tienes
#define mul(x, y) x * y
¿Qué pasa si digo:
mul(a + 5, 6); /* a + 5 * 6 */
Ahora si cambio ligeramente la macro:
#define mul(x, y) ((x) * (y))
mul(a + 5, 6); /* ((a + 5) * (6)) */
Recuerde, los argumentos no se evalúan ni nada, solo se realiza la sustitución textual.
EDITAR
Para obtener una explicación sobre cómo tener la macro completa entre paréntesis, consulte el enlace publicado por Nate CK .