【问题标题】:So what does "return 0" actually mean?那么“返回 0”实际上是什么意思呢?
【发布时间】:2013-02-02 10:11:00
【问题描述】:

我很精通 PHP,但我已经开始涉足 C。我看过代码

return 0;

在不返回值的函数的末尾。这在 PHP 中没有使用,因为如果函数没有返回值,则会自动返回值 NULL。

我要问的是,用简单的英语,return 0 实际上是做什么的?是否像 PHP 一样,将其参数作为函数调用的值返回?这只是一种好的做法吗?

我知道这个问题以前被问过很多次,但我是从 PHP 开发人员的角度来问的。谷歌给出的答案并没有那么简洁。

【问题讨论】:

  • at the end of functions that don't return a value 你的意思是void 函数?
  • 不了解 C 但某些语言在不返回值的函数中需要 :void(如 :Number 或 :String)。
  • @Cicade 对不起 - 是的,这正是我的意思。
  • 发布函数签名。它看起来像以下三个之一吗? int foo(无效);无效富(无效);富(无效);

标签: c return


【解决方案1】:

在 C 中,只有在函数的开头使用 void 声明函数时,才不必返回值。 第一个例子:

#include <stdio.h>
 int main()
{
   printf("Hello World!");
    return 0; // you have to use return because main starting with int
}

第二个例子:

#include <stdio.h>
void main()
{
printf("Hello World!");
//in this case return is useless, main is a void function

}

【讨论】:

  • 在第一个例子中它返回了什么?
【解决方案2】:

C 编程语言允许程序退出或从主函数返回,通过返回整数或返回宏 EXIT_SUCCESSEXIT_FAILURE 来表示成功或失败。在 Unix 上,它们分别等于 0 和 1。 C 程序也可以使用exit() 函数指定整数状态或退出宏作为第一个参数。

除了宏EXIT_SUCCESSEXIT_FAILURE之外,C标准没有定义返回码的含义。返回码的使用规则因平台而异。

【讨论】:

    【解决方案3】:

    它像 php 一样,它返回它的参数作为 函数调用?这只是一种好的做法吗?

    是的,PHP 和许多其他语言从“C”中借用了return 关键字。在所有语言中,return 关键字具有相同的功能 - 从函数返回。 return 关键字后面的任何内容都是返回给调用者的值。

    这是一个好习惯吗?是和否。并非所有函数都应该返回一个值。甚至在标准库中也有不少,不返回任何值。因此它们的返回类型是void

    但是main函数应该返回0(也可以是EXIT_SUCCESS)来标识程序已经成功执行。否则为 -1(还有 EXIT_FAILURE

    编辑:(感谢@KeithThompson):

    EXIT_FAILURE 是实现定义的。 1EXIT_FAILURE 的常见值,但重点是,您不必知道。

    【讨论】:

    • 啊,我明白了。很好的答案。我知道这是一个简单的问题,但我只是想在投入项目之前 100% 澄清我脑海中的所有事情!
    • @JWH 太好了。我支持在编程时思路清晰
    • EXIT_FAILURE 的值是实现定义的。它不是通常是-11 更常见。但重点是,您不必知道“我们关心的价值是什么”。
    • @KeithThompson 同意
    • 实际上,main() 是唯一一个不需要 需要return 0;non-void 函数。对于main(),并且仅对于main()return 0; 是隐含的。
    【解决方案4】:

    由于历史原因,可以编写 return 0; 以从已声明为 void 的函数返回,如下所示:

    void foo( /* arguments */ )
    {
      /* do things */
      return 0;
    }
    

    这什么也没做,0(或你放在那里的任何东西)都被扔掉了。此外,如果你这样做,明智的编译器会给你一个警告信息。所以不要这样做。

    【讨论】:

    • 这是标准 C 中的约束违规。(所以它只是“可能”,因为一切皆有可能)
    【解决方案5】:

    如果没有定义其他返回类型,C 中的函数默认返回 int。 return 0 是一种很好的做法,可以确保函数返回一个已知值,而不是一些随机值,以防调用者正在查看返回值。

    【讨论】:

    • 值得注意的是,这是 ANSI C,而现代 C(C99 及更高版本)不鼓励或禁止推断类型。
    • 只有 c89 是这种情况
    • 鼓励人们检查已声明为不返回值的函数的返回值真的是一种好习惯吗?
    • "Functions in C return int by default,"的意思是,在K&R和c90中,编译器可以写foo(){return 1;}来获取一个函数任意数量的未指定类型的参数并返回int。不,在编写新代码时依赖这种行为并不是一个好习惯,但编译器需要支持它,因为那里有遗留代码。
    【解决方案6】:

    它实际上是返回一个 0 的整数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-08
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      • 2012-04-20
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      相关资源
      最近更新 更多