【问题标题】:#if macros in Objective-CObjective-C 中的 #if 宏
【发布时间】:2017-07-10 14:26:59
【问题描述】:

我正在尝试根据某些条件定义宏的值,例如

#define DEV NO
#if DEV == YES
#define API_ENDPOINT_HOST @"https://my-dev.com/"
#else
#define API_ENDPOINT_HOST @"http://my-qa.com/"
#endif

但即使我已将 DEV 定义为否,它始终将 API_ENDPOINT_HOST 视为 @"https://my-dev.com/"。这里有什么问题?

【问题讨论】:

  • 您需要使用数值,例如01.

标签: objective-c macros


【解决方案1】:

连Uli的回答都是正确的(正如大家所预料的那样),我想更详细地解释一下:

在 PP 阶段,#if 指令中的未定义标识符被替换为 0。NOYES 不再像过去那样定义为宏,而是变成了文字。所以它们在 PP 阶段是未定义的。

你的第二行是:

#if DEV == YES

DEV 被替换为NO ...,

#if NO == YES

...未定义为YES 的是。因此两者都被 0 替换:

#if 0 == 0

这显然是真的。

【讨论】:

    【解决方案2】:

    NO 和 YES 是 Objective-C 的结构。预处理器在 Objective-C 编译器之前运行,所以还不知道是或否。通常人们在预处理器定义中使用 0 和 1。

    【讨论】:

      【解决方案3】:

      或者,只需定义您的符号,然后使用#ifdef 而不是#if

      #define DEV
      
      #ifdef DEV
        #define API_ENDPOINT_HOST @"https://my-dev.com/"
      #else
        #define API_ENDPOINT_HOST @"http://my-qa.com/"
      #endif
      

      【讨论】:

        猜你喜欢
        • 2017-04-19
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-28
        相关资源
        最近更新 更多