【问题标题】:Clarifying Return 0 and 1澄清回报 0 和 1
【发布时间】:2013-09-11 09:18:13
【问题描述】:

所以在函数 (Not main) 中返回 0 意味着 false 并返回 1 或除0 表示成功

为什么我们在main()函数中放0,意思是没有错误,而在其他函数中1表示运行成功,谢谢。

【问题讨论】:

  • 您似乎混淆了“成功布尔值”和“错误代码”的概念。一些函数在成功时返回true,在失败时返回false(有时还会另外设置像errno这样的全局变量到某个错误号);其他(如main)返回错误代码,0 表示“无”(即“无错误”,即“成功”),非零数字对应各种错误。
  • 您的前提是,返回 0 表示假,返回 1 表示真,这是……被误导了。在那之后,剩下的问题就没有多大意义了。

标签: c++ c return


【解决方案1】:

01(或任何非零数字)在转换为 bool 的上下文中转换为布尔值 falsetrue,例如在if(here) ...。这在您的程序中使用

main 的返回值以不同的方式使用,它返回到调用程序的 shell。在 shell 的上下文中,值的解释不同。在那里,0 传统上表示“没有错误”,而大于零的值表示错误,并且该值本身包含一些关于发生何种错误的提示。从man grep 获取这个sn-p:

EXIT STATUS
     The grep utility exits with one of the following values:

     0     One or more lines were selected.
     1     No lines were selected.
     >1    An error occurred.

【讨论】:

  • 这澄清了我要问的其他问题,谢谢。
  • 您可能会考虑使用 exit(EXIT_SUCCESS) 和 exit(EXIT_FAILURE) 来避免解释中的复杂性,至少从您的角度来看。正如@DanielFrey 所说,这实际上取决于接收应用程序退出代码的工具,但您对此无能为力。
【解决方案2】:

默认情况下,返回某个数字并不意味着什么。

开发者决定方法返回什么以及返回值的含义。

main 返回一个退出代码,0 表示 没有错误,这很简单,还有更多可能的返回值,只有 01

【讨论】:

    【解决方案3】:

    对于哪个值代表失败和哪个值代表成功,没有标准。但是,传统上,C/C++/Unix 选择使用 0 表示成功,非零表示失败,因为非零值可以作为错误代码来表示各种失败原因。

    【讨论】:

      【解决方案4】:

      这样想:

      按照传统,没有函数会返回表示成功的布尔值。相反,返回类型要么是某个错误号,要么是某个对象指针。

      现在,如果返回错误码并且没有发生错误,自然不会返回错误。这就是main() 返回时为零的含义。因此,if(main()) 的意思类似于 if(error)

      同样,如果返回一个对象指针,并且发生错误,则不能返回任何对象,这再次由零(= 空指针)指示。所以,if(getObject()) 的意思类似于 if(/*getObject() actually returned something*/)

      所以,即使它看起来是错误的方式,它不是。只是没有任何东西直接返回成功布尔值。

      【讨论】:

        【解决方案5】:

        返回值本身没有任何意义,开发人员决定该值是否意味着错误。

        但请看一下错误代码及其处理方式。

        int MyFunctionWhichCanFail(...)
        {
            /*some code*/
            return ERROR_CODE;
        }
        
        int FunctionWhichWorksWithFunctionWhichCanFail()
        {
            if (MyFunctionWhichCanFail(...))
            {
                //some error handling
            }
        
            //other stuff
        }
        

        在这种情况下可能会出现很多不同的错误,所以错误代码是一个很好的选择,如果可能出现失败/成功的结果最好使用bool

        我还想指出,在大多数系统中,零被定义为ERROR_SUCCESS(或其他一些表示成功的关键字)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-14
          • 1970-01-01
          • 2013-12-06
          • 1970-01-01
          • 2017-02-19
          • 2013-01-03
          相关资源
          最近更新 更多