我有一个项目,其中包含一些使用Objective-C语句定义的宏,如下所示:
#define TEST [someObject someNumber] == 500
我需要根据此结果定义另一个值,如下所示:
#if TEST
#define THING = 1
#else
#define THING = 2
#endif
但是,这不起作用。我不能使用#ifdef TEST
,因为值始终是定义的。即使它是false
,它仍然是定义的。
TEST
基于ObjC语句,似乎预处理器无法对其进行评估。那么,有没有办法测试呢?
答案 0 :(得分:1)
在你写的评论中:
由于必须在运行时评估TEST,因此在构建期间无法知道它的值。因为预处理器无法知道该值,所以它无法对其进行测试。这是对的吗?
是
预处理器在编译器的其余部分之前运行(至少逻辑上)。它本质上是语言和语法无关的,甚至无法访问代码中定义的常量。条件结构仅与预处理器标记一起运行。