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.

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

 Jens Gustedt01 июн. 2012 г., 12:00
Как вы измеряете эффективность? Время кодирования, время выполнения, ремонтопригодность ...
 Klas Lindbäck01 июн. 2012 г., 13:20
Макрос, вероятно, более эффективен. Если оптимизатор указывает функцию, они, вероятно, будут эквивалентны.
 Paul R01 июн. 2012 г., 11:54
Так много дубликатов ...

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

Попробуй это

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

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

 Shahbaz01 июн. 2012 г., 11:54
Тебе все еще не хватает скобок. Представитьz/MULT(x, y)
Решение Вопроса

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

#define MULT(x, y) ((x)*(y))
 Katti01 июн. 2012 г., 11:57
Спасибо. Но вопрос был больше обеспокоен эффективностью.
 Paul R01 июн. 2012 г., 11:58
@ Катти: как это связано с эффективностью?
 aztaroth01 июн. 2012 г., 11:58
Почему бы не просто использоватьx * y и пропустить макрос или функцию, тогда?
 Shahbaz01 июн. 2012 г., 11:59
@ PaulR, меньше скобок, меньше время компиляции. Бам! (Просто шучу
 Katti01 июн. 2012 г., 11:59
Macros - это прямая замена, вызываются функции и отправляются данные. Так что должно быть какая-то разница, это то, что я чувствовал.

Ваш ответ на вопрос