Почему "#define EOF (-1)", а не просто "#define EOF -1"
Я использую Visual Studio 2015, чтобы изучить некоторые базовые C. Экспериментируя с символической константой EOF, я решил посмотреть ее определение, и вот что я нашел:
#define EOF (-1)
Я подумал, что странно, что -1 заключен в круглые скобки, поэтому я решил создать свою собственную символическую константу -1, поэтому сделал следующее:
#define ABC -1
В отладчике и EOF, и ABC отображаются как значение -1, поэтому я задумался, почему в определении EOF используется (-1)
представлять -1
когда скобки не нужны?
Благодарю.
1 ответ
Всегда полезно, если не нужно, добавлять необходимые числа скобок в определенный макрос.
Например, если вы делаете
#define SUM(a,b) a + b
#define MUL(a,b) a * b
int a = MUL(4+5, 2+3); // you get 4+5*2+3 = 17 instead of 45.
int b = 4 * SUM(1,1); // you get 4*1+1 = 5 instead of 8.
Так тебе лучше пиши
#define SUM(a,b) ((a) + (b))
#define MUL(a,b) ((a) * (b))
И так как это хорошая привычка, всегда используйте ()
в макросах.
Еще одна веская причина - пример, показанный в комментариях к вашему вопросу.