错误:使用#defined常量在线预期表达式

时间:2013-04-07 20:45:40

标签: objective-c macros compiler-errors

我正在做这个

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

但是Xcode给了我一个错误:

  

预期表达

我已将experienceD定义为

#define experienceD 0;

我做错了什么?

2 个答案:

答案 0 :(得分:7)

分号不应该在那里。

#define experienceD 0

编译得很好。

使用像这样的UPPER_CASE_NOTATION来命名常量也是一个好习惯。

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

  

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

以及

  

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

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

static const int ExperienceD = 0;

答案 1 :(得分: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;
};