Почему "#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))

И так как это хорошая привычка, всегда используйте () в макросах.

Еще одна веская причина - пример, показанный в комментариях к вашему вопросу.

Другие вопросы по тегам