C Programación de multiplicación de macros [duplicado]

Posible duplicado:
C Macros y uso de argumentos entre paréntesis.

He encontrado esta pregunta macro para ser muy interesante.

Si este código siguiente se define como una macro

#define MULT(x, y) x * y

Y la llamada a la función se realiza comoint z = MULT(3 + 2, 4 + 2);. La salida deseada es 3 + 2 = 5 y 4 + 2 = 6 y 5 * 6 para ser 30.

Pero la salida devuelta fue 13. Lo toma como 3 + 2 * 4 + 2. Por lo tanto, de acuerdo con la prioridad de los operadores, evalúa primero 2 * 4.

¿Cuál es la solución aquí? ¿En caso de funciones más pequeñas como éstas, cuál es eficiente? ¿Definiendo la función o utilizando las macros?

Respuestas a la pregunta(2)

Su respuesta a la pregunta