2016-12-05 14 views
1

我有正在使用的Objective-C语句定义的一些宏的一个项目,像这样:Objective-C的宏,如果

#define TEST [someObject someNumber] == 500 

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

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

但是,这是行不通的。而且我不能使用#ifdef TEST,因为这个值总是被定义的。即使它是false,它仍然被定义。

TEST基于ObjC语句,似乎预处理器无法评估它。那么,有没有办法测试这个?

+0

预处理器能否在运行时知道'[someObject someNumber]的值? – Willeke

+0

预处理器能否在构建时知道[someObject someNumber]的值? – Vincent

+0

也许吧。一旦运行时启动,它应该知道这个值。如果有,我怎么知道?我将如何使用它? – ABeard89

回答

1

在评论你写道:

由于测试必须在运行时进行评估,也没有办法知道它在构建时的值。由于预处理器无法知道该值,因此无法对其进行测试。它是否正确?

是的。

预处理器在编译器的其余部分运行(至少在逻辑上)之前。它基本上是语言和语法不可知的,甚至不能访问你的代码中定义的常量。条件结构仅与预处理器令牌一起运行。