【问题标题】:Objective-C preprocessor directive for 'if not''if not' 的 Objective-C 预处理器指令
【发布时间】:2012-06-08 11:30:09
【问题描述】:

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

#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 文档 here 建议不要,但这似乎是一个非常基本的需求。

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

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

【问题讨论】:

    标签: ios objective-c iphone c-preprocessor preprocessor-directive


    【解决方案1】:

    你可以试试:

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

    【讨论】:

    • 我已删除所有对 TARGET_IPHONE_SIMULATOR 的引用。那只是一个例子。我只想知道如何在预处理器指令中说 IF NOT。
    • SOME_VARIABLE 周围的括号重要吗?
    【解决方案2】:

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

    #ifndef SOME_VARIABLE

    #if !defined(SOME_VARIABLE)

    【讨论】:

    • 我的问题与是否定义无关。只是想要一种方法来做等效的 if(!some_var){//do something};
    【解决方案3】:

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

    Meccan 的答案是正确的,因为 TARGET_IPHONE_SIMULATOR 被定义为 TRUEFALSE,具体取决于平台,因此表达式的计算结果将为零或非零值。

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

    同时考虑到这些语句的主题只能是其他预处理器定义的符号(通过#define),那么这个限制是合理的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-17
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      • 1970-01-01
      • 2023-03-05
      相关资源
      最近更新 更多