为什么当我对 int 使用 #define 时,我需要将它们括在括号中?

Bar*_*zyk 0 objective-c ios c-preprocessor

这是我发现的例子:

#define kNumberOfViews (37)
#define kViewsWide (5)
#define kViewMargin (2.0)
Run Code Online (Sandbox Code Playgroud)

为什么不能这样?

#define kNumberOfViews 37
#define kViewsWide 5
#define kViewMargin 2.0
Run Code Online (Sandbox Code Playgroud)

k前面又是什么意思?有什么指南吗?

Ror*_*nel 5

在您的示例中并不是真正需要它,但在定义中使用括号是一种有用的方法,可确保您的定义准确地说明您在定义上下文中的意思,并在代码中使用时保护它免受副作用的影响。

例如

#define VAR1 40
#define VAR2 20
#define SAVETYPING1 VAR1-VAR2
#define SAVETYPING2 (VAR1-VAR2)
Run Code Online (Sandbox Code Playgroud)

然后在你的代码中

foo(4*SAVETYPING1);  // comes out as foo(140)
Run Code Online (Sandbox Code Playgroud)

不一样

foo(4*SAVETYPING2); // comes out as foo(80)
Run Code Online (Sandbox Code Playgroud)

至于k前缀是什么意思。它用于常量。这里有很多关于起源的讨论:

目标 C - 为什么常量以 k 开头