在C++中,为什么需要使用int main
而不是void main
?
在C++中,为什么需要使用int main
而不是void main
?
简短回答是因为C++标准要求main()
函数返回一个int
类型的值。
你可能知道,main()
函数的返回值被运行时库用作进程的退出码。Unix和Win32都支持在进程结束后返回一个(小)整数的概念。从main()
函数返回一个值为程序员提供了一种指定这个值的方式。
大多数操作系统会将应用程序成功或失败的信息返回给用户或调用进程。在脚本编写中,这特别有用,可以根据程序的结果进行条件分支(if-then)。类似以下方式:
// pseudo-code
screenscrape http://mydatasource.com > results.txt
if errorlevel == 0 then
processfile results.txt
else
echo Screen Scraping Failed!
end if
通过 main 函数的返回值来确定程序执行状态。
尽管有些编译器允许使用 void main,但为了符合 ANSI 标准并保持简单一致,main 函数只有一个原型:
int main(int argc, char *argv[]);
因为在C语言中,参数由调用者清理,main函数的作者可以忽略声明或处理参数argc和argv。然而,如果调用main的设置程序期望int类型的返回值,而事实上没有找到返回值,行为可能是未定义的。
简短回答:
将
void main() { }
改为
int main() { }
在后续版本中的主要原因是向正在运行的操作系统通知程序执行期间发生的错误。
return 0;
如果返回的数字不是0,则表示程序已成功执行,这意味着发生了某些错误,其错误代码是由main函数返回的。如果您正在使用CodeBlocks IDE,请查看构建日志,如果主函数返回0,则通常会显示。
Process terminated with status 0
来自维基百科:
从主函数返回的值成为进程的退出状态,尽管C标准仅将特定含义归属于两个值:
EXIT_SUCCESS
(传统上为零)和EXIT_FAILURE
。其他可能的返回值的含义是由实现定义的。
因为int是程序可以返回给操作系统的返回代码。
您可以查询此值以检查操作是否成功。
在使用命令行脚本时,这非常有帮助。
或许是因为从main()
方法中以清晰的状态码退出是有意义的。在Java中,我们必须使用System.exit()
来模拟这一点,但这并不十分优雅。
就像在C语言中一样,因为进程将会给操作系统一个退出码。
你可以选择使用
int main (int argc, char ** argv)
{
return (0);
}
或者
int main (int argc, char ** argv)
{
exit (0);
}
我记得这至少是在C89中。
main
定义为int main(void)
、int main(int argc, char *argv[])
或其等效形式,也可以以“其他实现定义方式”进行定义。 C++标准的要求类似,但必须始终定义main()
返回int
(仅适用于托管环境;自由环境(即嵌入式)系统可以任意定义程序的入口点。) - Keith Thompsonvoid main() { ... }
完全可以,你仍然可以使用exit()
向环境返回一个退出码,或者在main
结束时默认返回0
。不使用void main()
的原因是语言标准不允许这样做,就像它不允许double main(long long foo, time_t bar)
一样。 - Keith Thompson