XCode - 重新定义宏

时间:2012-07-25 11:19:45

标签: objective-c macros c-preprocessor

小问题我在一个特定时间在屏幕上有大量物体(敌人)并且无法重新定义它们的值。我设置我的敌人从屏幕上的3开始。

我的目标是根据当前分数更改敌人数量。

我附上了以下代码的片段。

#define kEnemies 3

- (void) EnemyIncrease 
{
    if (self.score>=100) {
    #define kEnemies 4
    }
}

//我还尝试了其他的事情

#define kEnemies 3

- (void) EnemyIncrease
{
  if (self.score >=100) {
    #undef kEnemies
    #define kEnemies 6
  }
}

非常感谢一些帮助。


我现在已将代码更改为以下

int numberOfEnemies;

if (self.score>=0) {
 numberOfEnemies = 3
}

else if (self.score>=100) {
 numberOfEnemies = 4
}

然而现在的问题是,当分数满足新条件时,阵列不会更新numberOfEnemies。

for(int i = 0; i < numberOfEnemies; i++)

道歉我仍然是编码和尝试修改现有代码的新手

1 个答案:

答案 0 :(得分:6)

宏已经过预处理,这意味着它们会在代码的其余部分被编译之前得到处理。

取出你的代码,这意味着预处理器会看到这一点(使用你的第二个例子)。最终,kEnemies的值为6:

#define kEnemies 3
#undef kEnemies
#define kEnemies 6

将#defines用于变量并不可行,我只将它们用于常量。

您可以使用成员变量:

int numberOfEnemies;

...

if (self.score >=100) 
{
    numberOfEnemies = 6
}

(我删除了 k 前缀,因为此样式适用于常量)