为什么"#define EOF(-1)"而不只是"#define EOF -1"

T55*_*555 0 c

我正在使用Visual Studio 2015来学习一些基本的C.在尝试使用EOF符号常量时,我​​决定查找它的定义,这就是我发现的:

#define EOF (-1)
Run Code Online (Sandbox Code Playgroud)

我虽然将-1括在括号中是有点奇怪,所以我决定创建自己的-1符号常量,所以我做了以下内容:

#define ABC -1
Run Code Online (Sandbox Code Playgroud)

在调试器中,EOF和ABC都显示为值-1,所以我开始想知道,为什么EOF定义用于(-1)表示-1何时不需要括号?

谢谢.

glg*_*lgl 5

如果没有必要,将必要数量的括号添加到定义的宏中总是有帮助的.

例如,如果你这样做

#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.
Run Code Online (Sandbox Code Playgroud)

所以你最好写

#define SUM(a,b) ((a) + (b))
#define MUL(a,b) ((a) * (b))
Run Code Online (Sandbox Code Playgroud)

因为这是一个好习惯,所以总是()在宏中使用.

另一个很好的理由是您的问题的评论中显示的示例.

  • 我会说几乎没有*总是有用*.这很奇怪,但我今天看到了3个与此问题相关的问题 (3认同)