【发布时间】:2013-04-07 20:45:40
【问题描述】:
我正在这样做
if ([resourceCompletionReward objectAtIndex:experienceD] != 0) {
但是 Xcode 给了我一个错误:
预期的表达方式
我已将experienceD 定义为
#define experienceD 0;
我做错了什么?
【问题讨论】:
标签: objective-c macros compiler-errors
我正在这样做
if ([resourceCompletionReward objectAtIndex:experienceD] != 0) {
但是 Xcode 给了我一个错误:
预期的表达方式
我已将experienceD 定义为
#define experienceD 0;
我做错了什么?
【问题讨论】:
标签: objective-c macros compiler-errors
分号不应该在那里。
#define experienceD 0
会编译得很好。
另外,用这样的 UPPER_CASE_NOTATION 命名常量也是一个好习惯。
为了完整起见,我将添加 Apple 建议(来自 Coding Guidelines for Cocoa)
一般来说,不要使用#define 预处理器命令来创建常量。对于整数常量,使用枚举,对于浮点常量,使用 const 限定符
还有
如果常量与其他常量无关,您可以使用 const 创建一个整数常量;否则,使用枚举
因此,在您的具体情况下,最好将常量定义为
static const int ExperienceD = 0;
【讨论】:
const 关键字。预处理器宏通常是大写的。
#define 以驼峰形式定义。此外,使用const 而不是#define 显然会更好地定义这个特定的常量。
您不应该使用#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;
};
【讨论】: