Я не могу себе представить, что это имеет какое-то значение при разумном использовании в данном конкретном случае, но учтите это:
#define add(x,y) x+y
int i=add(3,5)*2
Теперь вы ожидаете, что у меня будет значение 16, верно ?, но оно расширится до i = 3 + 5 * 2, что даст мне значение 13.
HolyBlackCat написал в комментарии, что float x = sin BUF;
не будет компилироваться в последнем случае, и это полностью верно. Однако использование таких макросов - ОЧЕНЬ плохая идея.
Установка круглых скобок никогда не причиняет боль и часто помогает. Макросы - это просто расширенная копия. Поэтому, если вы можете представить фрагмент кода, в котором последовательность символов (8)
даст другой результат, чем 8
, то эти два макроса будут отличаться одинаково.
По аналогичным причинам, если макрос содержит несколько операторов, рекомендуется заключить их в цикл do-while. Учтите это:
#define callMy2Funcs(x,y) \
myFunc1(x); \
myFunc2(y);
Теперь вот это:
if(x>5)
callMy2Funcs(x,x);
расширится до
if(x<5)
myFunc1(x);
myFunc2(x);
вместо
if(x<5) {
myFunc1(x);
myFunc2(x);
}
Решение таково:
#define callMy2Funcs(x,y) \
do {\
myFunc1(x); \
myFunc2(y); \
} while(0)