【问题标题】:Error: expected expression on line using #defined constant错误:使用#defined 常量的预期表达式在线
【发布时间】:2013-04-07 20:45:40
【问题描述】:

我正在这样做

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

但是 Xcode 给了我一个错误:

预期的表达方式

我已将experienceD 定义为

#define experienceD 0;

我做错了什么?

【问题讨论】:

    标签: objective-c macros compiler-errors


    【解决方案1】:

    分号不应该在那里。

    #define experienceD 0
    

    会编译得很好。

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

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

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

    还有

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

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

    static const int ExperienceD = 0;
    

    【讨论】:

    • 这是另一种常量,使用 const 关键字。预处理器宏通常是大写的。
    • 查看 Foundation 或 AppKit 的标头,您会发现很多常量仍由 #define 以驼峰形式定义。此外,使用const 而不是#define 显然会更好地定义这个特定的常量。
    • 我同意第二点(我已经编辑了我的帖子,如果你看到的话)。关于预处理器宏的命名约定,我认为没有明确的指导方针。
    【解决方案2】:

    您不应该使用#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;
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      相关资源
      最近更新 更多