我正在阅读Brian Kernighnan和Dennis Ritchie的C编程(第25页)
这里的作者引用了:
power computes的值由return语句返回给main。任何表达式都可以跟随return:return expression;
但在他上面提供的代码中:
#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
}
在这里我理解为什么他在函数幂中使用了2. return p;
(即获得p的值),但为什么他使用1. return 0;
??
我尝试删除行return 0;
它仍然按照我的想法工作,是否有我遗漏的东西?
[UPDATE]
对不起之前我很抱歉,但我已经知道了这一点:
书中引用:
你可能已经注意到最后有一个return语句 主要。由于main是一个与其他函数一样的函数,因此它可能返回一个值 到它的调用者,这实际上是程序所在的环境 被执行了。通常,返回值为零意味着正常 终止;非零值表示异常或错误终止 条件。为了简单起见,我们省略了回报 到目前为止我们的主要功能的陈述,但我们会 以后将它们包括在内,以提醒程序应该返回 他们的环境状况。
感谢@Pascal,我能够理解返回p的区别;并返回0; 但是我的意图是永远不知道什么回归0;但是为什么回归也被用来了解返回法则之间的区别......
答案 0 :(得分: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函数返回的值为参数; 到达终止main函数的}返回值0 [...]
但是,在C90中,没有此类异常,并且在int
- 返回函数(例如main()
)到达最终}
而没有{{return
时,技术上未定义的行为1}}陈述。在实践中似乎发生的最糟糕的情况是程序在为函数结果保留的寄存器或堆栈槽中返回一个不确定的值,这样操作系统可能会认为程序在实际成功时失败了。
答案 1 :(得分:4)
main()
的返回代码通常是程序为操作系统指示它们是否成功完成的一种方式。通常,返回值为零意味着成功,而其他值则用于表示错误。
OS就像UNIX / Linux和Windows提供了检查此类返回代码的方法;在sh或bash中,$?
包含执行的最后一个命令的返回码,在Windows“cmd”中,您可以将其作为%ERRORLEVEL%
获取。
答案 2 :(得分:2)
如果程序正常工作,每个C程序的主要功能应返回0。这是一个你应该随时遵循的惯例。
答案 3 :(得分:0)
根据ISO / IEC C ++标准(14882),第3.6.1节规定函数main应具有两个签名之一:
int main(void) { .... }
or
int main(int argc, char** argv) { .... }
大多数编译器接受此类型的变体,例如仅main() { .... }
用于向后兼容性,例如您的示例代码。 main末尾的返回值是返回给调用环境(通常是命令shell)的值,它可以用来表示程序的成功完成(返回0),或者将错误代码返回给调用环境如果程序错误。
如果您在主要结尾处退回,则假定为return 0;
。