【问题标题】:Objective-C macro in preprocessor IF预处理器 IF 中的 Objective-C 宏
【发布时间】:2017-04-19 19:31:59
【问题描述】:

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

#define TEST [someObject someNumber] == 500

我需要根据这个结果定义另一个值,像这样:

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

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

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

【问题讨论】:

  • 预处理器在运行时能知道[someObject someNumber]的值吗?
  • 预处理器能否在构建时知道 [someObject someNumber] 的值?
  • 也许吧。运行时启动后,它应该知道该值。如果是这样,我怎么知道?我将如何使用它?
  • 越想越觉得这是个愚蠢的问题。由于 TEST 必须在运行时进行评估,因此无法在构建时知道它的值。因为预处理器无法知道该值,所以无法对其进行测试。这是正确的吗?

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


【解决方案1】:

在你写的 cmets 中:

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

是的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-28
    • 2023-03-12
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 2011-11-28
    • 1970-01-01
    相关资源
    最近更新 更多