【问题标题】:Objective C "#if" syntax目标 C "#if" 语法
【发布时间】:2011-10-07 02:04:53
【问题描述】:

当我查看某些类时,我对“磅 if”或 #if 语法感到有些困惑。

例如:

#if someConstant == someNumber
  do something
#elif
  etc

对比:

if (someConstant == someNumber) 
   do something
else if {
   do more stuff
}

有什么区别,为什么要使用#if

【问题讨论】:

    标签: objective-c syntax c-preprocessor


    【解决方案1】:

    #if 等是预处理器指令。这意味着它们是在编译之前而不是在运行时处理的。这可能很有用,例如,在定义仅在为 debug 而不是 release 构建时编译的调试行为:

    #if DEBUG
        #define ISRelease(x) [x release]
    #else
        #define ISRelease(x) [x release], x = nil
    #endif
    

    (代码由 Jeff LaMarche 的 blog 提供。)

    这样,您无需在提交应用之前检查整个应用的代码并删除大量调试代码。这只是使用这些指令的一个小例子。

    【讨论】:

    • #if 和 #ifdef 一样吗??
    • 否 - 如果您将上面的 #if 替换为 #ifdef(“如果已定义”),则仅当 DEBUG 已定义时,条件才会成功。还有一个 #ifndef 预处理器指令返回相反的结果(“如果未定义”)。
    【解决方案2】:

    #if 是一个预处理器指令

    if 是一种语言结构

    区别在于最终程序的编译方式。当您使用#if 时,该指令的结果就是最终程序将在这些行中包含的内容。当您使用语言构造时,传递给构造的表达式将在运行时而不是编译时进行计算。

    【讨论】:

      【解决方案3】:

      以前的答案涵盖了从调试到术语的 #if 用法,并遗漏了一个更常见的用法:#if 用于注释大块代码。当程序员需要删除已经包含 cmets 的东西时,这很有用。

      #if 0
        a lof of C code with /* style */ comments included
      #endif
      

      我确实经常使用它。优于任何其他 #if 和评论风格 - 它真的不关心其中的大部分语法错误。

      【讨论】:

        猜你喜欢
        • 2012-04-06
        • 1970-01-01
        • 2018-03-23
        • 2014-01-30
        • 2011-02-23
        • 1970-01-01
        • 1970-01-01
        • 2012-11-12
        • 2014-08-25
        相关资源
        最近更新 更多