Gre*_*ill 31

简短的回答是因为C++标准需要main()返回int.

您可能知道,main()函数的返回值被运行时库用作进程的退出代码.Unix和Win32都支持在进程完成后从进程返回的(小)整数的概念.返回值为main()程序员指定此值提供了一种方法.

  • "简短"答案实际上是*唯一*答案.允许`void main(){...}`是非常有意义的.您仍然可以使用`exit()`将退出代码返回给环境,或者如果到达`main`的末尾则默认为'0`.不使用`void main()`的原因是语言标准不允许它,只不过它允许`double main(long long foo,time_t bar)`. (2认同)

abe*_*nky 16

如果应用程序成功与否,大多数操作系统会向用户或调用进程报告.这在脚本编写时尤其有用,脚本可以在程序结果上有条件地分支(if-then).有点像:

// pseudo-code
screenscrape  http://mydatasource.com > results.txt
if errorlevel == 0 then
   processfile results.txt
else
   echo Screen Scraping Failed!
end if
Run Code Online (Sandbox Code Playgroud)

此结果状态通过main的返回值完成.

虽然一些编译器允许void main,但为了一致性和简单性,ANSI标准需要一个main的原型:

int main(int argc, char *argv[]);
Run Code Online (Sandbox Code Playgroud)

因为在C中,参数被调用者清理,main的作者可以忽略声明或处理参数argc&argv.但是,如果调用main的setup-routine期望一个int返回值,而不是找到一个,则行为可能是未定义的.

简短回答:

  • main的返回值对脚本很有用.
  • 调用main的设置和清理例程需要使用一致的接口.


小智 6

改变的主要原因

void main(){}

int main(){}

在以后的版本中,是为了在执行期间将程序中发生的错误通知运行它的操作系统

return 0;
Run Code Online (Sandbox Code Playgroud)

识别程序成功执行,如果有任何数字而不是0返回,这意味着发生了一些错误,谁的错误代码是由main返回的.如果您在codeblock IDE上运行,请参阅构建日志中是否正常显示主返回0

Process terminated with status 0
Run Code Online (Sandbox Code Playgroud)

否则它以红色显示状态代码,表示发生了错误