为什么我们需要使用int main
而不是void main
在 C++ 中?
8 回答
简短的回答是因为 C++ 标准要求main()
return 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 返回值,但没有找到,则行为可能未定义。
简短的回答:
- main 的返回值对脚本很有用。
- 调用 main 的设置和清理例程需要使用一致的接口。
改变的主要原因
无效的主要(){}
到
int main() { }
在以后的版本中,用于将程序在执行期间发生的错误通知给运行它的操作系统
return 0;
如果返回任何数字而不是 0,则识别程序成功执行,这意味着发生了一些错误,错误代码是 main 返回的。如果您在代码块 IDE上运行,请在构建日志中查看如果 main 返回 0 它通常会显示
Process terminated with status 0
否则它会以红色显示状态代码,这意味着发生了错误
来自维基百科:
从 main 函数返回的值成为进程的退出状态,尽管 C 标准仅将特定含义赋予两个值:(
EXIT_SUCCESS
传统上为零)和EXIT_FAILURE
. 其他可能的返回值的含义是实现定义的。
就像在 C 中一样,因为该进程会给操作系统一个退出代码。
您可以使用
int main (int argc, char ** argv)
{
return (0);
}
或者
int main (int argc, char ** argv)
{
exit (0);
}
这至少在 C89 IIRC 中。
因为 int 是程序可以返回给操作系统的返回码。
您可以查询该值以检查操作是否成功。
这在使用命令行脚本时非常有用。
也许是因为使用方法中的状态代码干净地退出是有意义的main()
。在 Java 中,我们必须模拟这种使用System.exit()
,这并不是那么优雅。
当我们执行我们的程序来检查它是否成功运行时。因此,当它返回 0 表示它为 true 并成功运行,如果它返回 1 则它没有成功运行&这个int
值告诉操作系统程序是否成功运行