Multiplicação de macros de programação C [duplicado]

Duplicata Possível:
C Macros e uso de argumentos entre parênteses

Eu achei essa pergunta macro muito interessante.

Se este código a seguir for definido como uma macro

#define MULT(x, y) x * y

E a chamada de função é feita comoint z = MULT(3 + 2, 4 + 2);. A saída desejada é 3 + 2 = 5 e 4 + 2 = 6 e 5 * 6 como 30.

Mas a saída retornada foi 13. Leva como 3 + 2 * 4 + 2. Assim, de acordo com a precedência dos operadores, ele avalia 2 * 4 primeiro.

Qual é a correção aqui? No caso de funções menores como estas, qual delas é eficiente? Definindo a função ou usando as macros?

questionAnswers(2)

yourAnswerToTheQuestion