Objective-C中用于“if not”的预处理指令是什么?

45

我知道如何使用这样的预处理指令:

#if SOME_VARIABLE
    // Do something
#else
    // Do something else
#endif

但如果我只想在 NOT SOME_VARIABLE 时执行某些操作怎么办。

显然,我仍然可以这样做:

#if SOME_VARIABLE

#else
    // Do something else
#endif

留空 `if`,但有没有其他方法实现这一点:

#if not SOME_VARIABLE
   // Do something
#endif

苹果文档这里建议不要这样做,但这似乎是一个非常基本的需求。

基本上,我想要做预处理器的相当于:

if(!SOME_VARIABLE)(
{
   // Do Something
}
3个回答

92

你可以尝试:

#if !(SOME_VARIABLE)
   // Do something
#endif

我已经删除了所有对TARGET_IPHONE_SIMULATOR的引用。那只是一个例子。我只想知道如何在预处理指令中表示“IF NOT”。 - Undistraction
6
括号是否围绕在SOME_VARIABLE周围有影响吗? - Thomas Watson

25
你想要检查某个东西是否已经定义了吗? 如果是的话,你可以尝试以下方法:

#ifndef SOME_VARIABLE

或者

#if !defined(SOME_VARIABLE)


我的问题与它是否被定义无关,我只是想知道如何实现等效的if(!some_var){//do something};。 - Undistraction

4
苹果文档(If - The C Preprocessor)是正确的,这就是C预处理器语句从一开始就存在的方式。根据同样的文档,你所能做的就是创建一个表达式,该表达式评估为零或非零值并使用它。Meccan的答案是正确的,因为TARGET_IPHONE_SIMULATOR被定义为TRUE或FALSE取决于平台,因此表达式将评估为零或非零数量。通常,这些宏(#if等)用于基于符号是否已定义来包含或排除内容。对于这种用例,预处理器具有#ifdef和#ifndef,涵盖了历史上被认为是最重要的情况。此外,鉴于这些语句的主题只能是其他预处理器定义的符号(通过#define),因此这个限制是合理的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接