【问题标题】:what does this C code do with return code?这个 C 代码对返回码有什么作用?
【发布时间】:2011-12-21 11:13:34
【问题描述】:

函数在失败时返回 TRUE,在成功时返回 FALSE

我看到一些这样的函数自己做这个:

return return_code != 0;

return (return_code != 0);

在这个函数中,在每个错误情况下,它都会返回 TRUE - 这很好,并且在出现错误时应该做什么。

但是上面的代码意味着什么?它是否试图确保 return_code 是 FALSE - 明确的?

【问题讨论】:

  • 它通过返回0或1来表示成功或失败。从这段代码中并不清楚这意味着什么,但这可能是因为return_code可能包含更多信息,而不仅仅是成功/失败。做 !!return_code 会做同样的事情,我认为这看起来更好。这同样适用于指针,如果指针不是或为 NULL,则 !!pointer 分别返回 1 或 0。

标签: c error-handling return-value


【解决方案1】:

我想说的是试图从所有可能的整数值折叠到 01 的值。我假设该函数返回一个整数类型;将结果评估为布尔表达式会强制结果为这两个值。

【讨论】:

    【解决方案2】:

    两者都依赖于 return_code 的值:

    return_code = 0;
    
    return(return_code != 0); // returns false
    return(return_code == 0); // returns true
    

    return_code = "anything but a zero";
    
    return(return_code != 0); // returns true
    return(return_code == 0); // returns false
    

    【讨论】:

    • 哇,它会做作业吗?那是不是不对? return_code 应该根据函数中发生的事件来决定,而不是像这样明确地......
    • 在函数的某个时刻,必须定义 return_code 并为其分配一个值。它不是 C 中的“默认”变量。
    • aaah....我现在明白了。如果函数设计为在成功时返回 FALSE,在失败时返回 TRUE,那么在每个失败条件下,您都返回 TRUE 并退出。但是如果你到达return(return_code != 0);,这意味着一切都很好,return_code 为零。所以它会返回 FALSE - 我们真正想要的失败。 - 但这一切对我来说似乎是不必要的。不知何故,我在这里错过了重点。
    • 考虑调用上下文。该函数可能被命名为“didItWork()”,这意味着返回 false 值意味着它失败了。但在函数内部,无论出于何种原因,return_code 都设置为 true,因此您必须反转该值以使其为“false”以使函数名称有意义。
    【解决方案3】:

    只是进一步的解释 -

    很可能在程序中的某个地方定义了 TRUE 和 FALSE:

    #define TRUE  1
    #define FALSE 0
    

    计算布尔表达式时,结果始终为 1 或 0,如果布尔表达式的计算结果为真,则为 1,如果为假,则为 0。这就是为什么您可以测试一个布尔表达式的计算结果是 TRUE 还是 FALSE。如果您只是对布尔表达式感到好奇并想了解更多基本信息,这里有一个不错的tutorial

    【讨论】:

      【解决方案4】:

      一个简单的例子来说明清楚,一个函数将 a 与 b 分开。如果除法可以评估为 false,则返回 true 否则

      bool div(double a, double b, double& r)
      {
         int return_code = 1;
         if (b == 0) // cannot divide
            return_code = 0;
         else
            r = a/b;
      
         return (return_code != 0);
      }
      

      在这个简单的例子中,只有当 b==0 时,return_code 才会为 0,所以 Marc 回答它会返回 false。在任何其他情况下,它将返回 true。当然,没有理由在这么简单的函数中做这样的事情。在更复杂的函数中,成功与否在很多地方都可以改变,通常的做法是使用这样的返回语句。

      【讨论】:

        猜你喜欢
        • 2014-09-20
        • 2011-12-31
        • 2011-07-18
        • 1970-01-01
        • 1970-01-01
        • 2011-04-13
        • 1970-01-01
        • 2014-09-28
        • 2015-07-19
        相关资源
        最近更新 更多