预处理器IF中的Objective-C宏

时间:2016-12-05 11:54:36

标签: objective-c xcode macros boolean c-preprocessor

我有一个项目,其中包含一些使用Objective-C语句定义的宏,如下所示:

#define TEST [someObject someNumber] == 500

我需要根据此结果定义另一个值,如下所示:

#if TEST
  #define THING = 1
#else
  #define THING = 2
#endif

但是,这不起作用。我不能使用#ifdef TEST,因为值始终是定义的。即使它是false,它仍然是定义的。

TEST基于ObjC语句,似乎预处理器无法对其进行评估。那么,有没有办法测试呢?

1 个答案:

答案 0 :(得分:1)

在你写的评论中:

  

由于必须在运行时评估TEST,因此在构建期间无法知道它的值。因为预处理器无法知道该值,所以它无法对其进行测试。这是对的吗?

预处理器在编译器的其余部分之前运行(至少逻辑上)。它本质上是语言和语法无关的,甚至无法访问代码中定义的常量。条件结构仅与预处理器标记一起运行。