3

我正在做这个

if ([resourceCompletionReward objectAtIndex:experienceD] != 0) {

但是 Xcode 给了我一个错误:

预期表达

我定义experienceD

#define experienceD 0;

我究竟做错了什么?

4

2 回答 2

7

分号不应该在那里。

#define experienceD 0

会编译得很好。

此外,使用这样的 UPPER_CASE_NOTATION 命名常量也是一个好习惯。

为了完整起见,我将添加 Apple 建议(来自Coding Guidelines for Cocoa

通常,不要使用#define 预处理器命令来创建常量。对于整数常量,使用枚举,对于浮点常量,使用 const 限定符

并且

如果常量与其他常量无关,您可以使用 const 创建一个整数常量;否则,使用枚举

因此,在您的特定情况下,最好将常量定义为

static const int ExperienceD = 0;
于 2013-04-07T20:49:49.490 回答
1

您不应该使用#define来定义常量。所做#define的只是文本替换,因此在您的情况下,编译器会看到

if ([resourceCompletionReward objectAtIndex:0;] != 0) {

并抱怨;它不应该在的地方。

如果要计算常数,这可能会特别麻烦:

#define CONSTANT 1 + 2
int y = 2 * CONSTANT;

编译器进行简单的文本替换,所以你得到

int y = 2 * 1 + 2;

这不是真正的预期值。要解决此问题,您可以记住在每个#defined 常量周围添加括号。

定义常量的更好方法是使用const变量:

static const int experienceD = 0;

如果你定义了很多具有连续整数值的常量,你也可以使用枚举。

enum {
    experienceD = 0;
};
于 2013-04-07T21:11:00.810 回答