使用return 0; 在C的main()中

Gir*_*yas 0 c return function

我正在阅读Brian Kernighnan和Dennis Ritchie的C编程(第25页)

这里作者引述:

power计算的值由return语句返回main.任何表达式都可以跟随return:return表达式;

但在他上面提供的代码中:

#include <stdio.h>
int power(int m , int n);

main()
{
    int i;
    for (i = 0; i < 10; ++i)
    printf ( " %d \t %d \t %d \n ", i, power( 2 , i), power( -3 , i));
    return 0;//no. 1
}

int power(int m , int n)
{
    int i, p ;
    p = 1;
    for (i = 1; i <= n; ++i)
    p = p * m;
    return p; //no. 2
}
Run Code Online (Sandbox Code Playgroud)

在这里我理解为什么他return p;在功能上使用2. (即得到p的值),但他为什么使用1. return 0;?? 我尝试删除线路return 0;它仍然按照我的想法工作,有什么我想念的吗?

[更新]我很抱歉之前不包括这个,但我已经知道了这一点:
书中引用:

您可能已经注意到main的末尾有一个return语句.由于main是一个与其他函数一样的函数,因此它可以向其调用者返回一个值,这实际上是执行程序的环境.通常,返回值为零意味着正常终止; 非零值表示异常或错误的终止条件.为了简单起见,我们在此之前省略了主要功能的返回语句,但是我们将在下文中包含它们,以提醒程序应该将状态返回到它们的环境中.

感谢@Pascal,我能够理解返回p的区别; 并返回0; 但是我的意图是永远不知道什么回归0; 但为什么回归也被用来知道两个回报的差异......

Pas*_*uoq 10

在程序入口点以外的函数中,return e;指示将发送给调用者的结果.


一个return i;在声明main()函数是一种方式,而不是用于通信的退出代码操作系统的程序.在POSIX中,return 0;表示成功.

return 0;在函数结尾main()是如此敷衍,在C99,它被成为可选.在}结束函数main()隐含的行为类似于return 0;根据标准:

5.1.2.2.3程序终止

1如果main函数的返回类型是兼容的类型int,则从初始调用返回main函数等效于调用exit函数,并将main函数返回的值作为其参数; 到达终止主函数的}返回0 [...] 的值

但是,在C90中,没有这样的异常,并且在技术上未定义的行为具有 - int返回功能,例如main()}没有return声明的情况下到达最终.在实践中似乎发生的最糟糕的情况是程序返回在为函数结果保留的寄存器或堆栈槽中具有不确定的值,因此操作系统可能认为程序在实际成功时失败.

  • 实际上,C90也称为ISO C(ISO/IEC 9899:1990).ANSI C最常被称为C89,因为ANSI通过了标准.除了格式化之外,它们是相同的,并且INCITS和ISO/IEC已经撤销了ISO标准. (2认同)