我正在尝试根据某些条件定义宏的值,例如
#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。NO
和YES
不再像过去那样被定义为宏观,而是变成了文字。因此,它们在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