41

我了解如何使用这样的预处理器指令:

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

但是,如果我只想做一些 IF NOT SOME_VARIABLE 的事情怎么办。

显然我仍然可以这样做:

#if SOME_VARIABLE

#else
    // Do something else
#endif

. . . 将 if 留空,但是有没有办法:

#if not SOME_VARIABLE
   // Do something
#endif

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

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

if(!SOME_VARIABLE)(
{
   // Do Something
}
4

3 回答 3

86

你可以试试:

#if !(SOME_VARIABLE)
   // Do something
#endif
于 2012-06-04T11:32:00.443 回答
22

您是否要检查是否已定义某些内容?如果是,您可以尝试:

#ifndef SOME_VARIABLE

或者

#if !defined(SOME_VARIABLE)

于 2012-06-04T11:47:20.320 回答
4

Apple 文档(If - The C Preprocessor)是正确的,这就是 C 预处理器语句从一开始就采用的方式。根据相同的文档,您所能做的就是制作一个计算结果为零或非零值的表达式并使用它。

Meccan 的答案是正确的,如TARGET_IPHONE_SIMULATOR定义为TRUEFALSE取决于平台,因此表达式将计算为零或非零量。

通常,这些宏(#if等)用于根据是否定义符号来包含或排除事物。对于该用例,预处理器具有#ifdef并且#ifndef涵盖了历史上被认为是最重要的情况。

此外,鉴于这些语句的主题只能是其他预处理器定义的符号(通过#define),那么这种限制是合理的。

于 2012-06-04T11:47:30.330 回答