if else 为预处理器定义

Posted

技术标签:

【中文标题】if else 为预处理器定义【英文标题】:if else define for preprocessor 【发布时间】:2016-11-25 10:53:08 【问题描述】:
//initial code:

#define MYDEBUG YES

#if (defined(MYDEBUG) && MYDEBUG == YES)
#define NATIVEUNITID @"unitid_debug"
#else
#define NATIVEUNITID @"unitid_release"
#endif


//somewhere inside the code

NATIVEUNITID@"unitid_release"

可能是我不明白的东西。但为什么?什么是正确的定义方式 NATIVEUNITID 使用其他定义?

#if (MYDEBUG)#if (MYDEBUG == true) 我都试过了,但我得到了相同的结果。

请帮助我理解这个简单的案例。我怎样才能收到 NATIVEUNITID@"unitid_debug" 吗?

【问题讨论】:

【参考方案1】:

预处理器无法为“字符串”评估 ==

如果你写#DEFINE YES 1,你可以保留你的符号

【讨论】:

【参考方案2】:

改进this answer

#if !defined(YES)
#define YES (BOOL)1
#endif
#if !defined(NO)
#define NO  (BOOL)0
#endif

之前

#define MYDEBUG YES

【讨论】:

以上是关于if else 为预处理器定义的主要内容,如果未能解决你的问题,请参考以下文章

预处理器指令

XCode 语法在预处理器 #if #else 的两种情况下突出显示

#define 预处理器指令可以包含 if 和 else 吗?

C#预处理器指令之#define/#undefine/#if/#elif/#else/#endif

如何在 C++ 中将“elif”定义为“else if”?

C预处理器和C库