#if macros in Objective-C



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

#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/"。这是怎么回事?

即使 Uli 的回答是正确的(正如大家所料(,我想更详细地解释一下:

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

您的第二行是:

#if DEV == YES

DEV替换为NO...,

#if NO == YES

。什么是未定义的YES。因此,两者都替换为 0:

#if 0 == 0

这显然是真的。

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

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

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

最新更新