C Программирование умножения макросов [дубликаты]

Возможное дублирование:
C Макросы и использование аргументов в скобках

Я нашел этот макро вопрос очень интересным.

Если этот следующий код определен как макрос

#define MULT(x, y) x * y

И вызов функции выполняется какint z = MULT(3 + 2, 4 + 2);. Желаемый выход составляет 3 + 2 = 5 и 4 + 2 = 6, а 5 * 6 равняется 30.

Но возвращенный результат был 13. Он принимает его как 3 + 2 * 4 + 2. Следовательно, в соответствии с приоритетом операторов, он сначала оценивает 2 * 4.

Что за исправление здесь? В случае небольших функций, подобных этим, какая из них эффективна? Определение функции или использование макросов?

Ответы на вопрос(2)

Попробуй это

#define MULT(x, y) ((x) * (y))

Лично я думаю, что это более читабельно (и меньше нажатий клавиш) длян используйте макрос. Это тот тип вещей, который кто-то начнет добавлять в свой код в спешке, узнавая что-то новое, и потом будет сожалеть.

Попробуйте что-то вроде:

#define MULT(x, y) ((x)*(y))

ВАШ ОТВЕТ НА ВОПРОС