【发布时间】:2010-10-01 18:44:08
【问题描述】:
为什么我们需要在 C++ 中使用 int main 而不是 void main?
【问题讨论】:
标签: c++ function return-value main
为什么我们需要在 C++ 中使用 int main 而不是 void main?
【问题讨论】:
标签: c++ function return-value main
简短的回答是因为 C++ 标准要求 main() 返回 int。
您可能知道,main() 函数的返回值被运行时库用作进程的退出代码。 Unix 和 Win32 都支持进程完成后从进程返回的(小)整数的概念。从main() 返回一个值为程序员提供了一种指定该值的方法。
【讨论】:
main 定义为int main(void)、int main(int argc, char *argv[]) 或等效项,或“或以某种其他实现定义的方式”。 C++ 标准的要求类似,但必须将main() 定义为始终 以返回int。 (这仅适用于托管环境;独立(即嵌入式)系统可以以任何他们喜欢的方式定义程序的入口点。)
void main() { ... } 是非常有意义的;您仍然可以使用exit() 将退出代码返回到环境,或者如果您到达main 的末尾,则只需默认为0。不使用void main() 的原因是语言标准不允许它,就像它允许double main(long long foo, time_t bar) 一样。
大多数操作系统会向用户或调用进程报告应用程序是否成功。这在脚本编写中特别有用,其中脚本可以根据程序的结果有条件地分支(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 返回值,但没有找到,则行为可能是未定义的。
简答:
【讨论】:
就像在 C 中一样,因为进程会给操作系统一个退出代码。
你可以使用
int main (int argc, char ** argv)
{
return (0);
}
或
int main (int argc, char ** argv)
{
exit (0);
}
这至少在 C89 IIRC 中。
【讨论】:
因为 int 是程序可以返回给操作系统的返回码。
您可以查询该值来检查操作是否成功。
这在使用命令行脚本时非常有用。
【讨论】:
来自维基百科:
从主函数返回的值成为进程的退出状态,尽管 C 标准仅将特定含义赋予两个值:
EXIT_SUCCESS(传统上为零)和EXIT_FAILURE。其他可能的返回值的含义是实现定义的。
【讨论】:
也许是因为使用main() 方法中的状态码干净地退出是有意义的。在 Java 中,我们必须使用 System.exit() 来模拟它,这并不是那么优雅。
【讨论】:
当我们执行我们的程序来检查它是否运行成功。因此,当它返回 0 表示它为 true 并成功运行,如果它返回 1 则它没有成功运行 & 这个 int 值告诉操作系统程序是否成功运行
【讨论】:
改变的主要原因
void main() { }
到
int main() { }
在以后的版本中是为了通知程序在执行期间发生的错误到运行它的操作系统
return 0;
如果返回任何数字而不是0,则表明程序成功执行,这意味着发生了一些错误,错误代码是main返回的。 如果您在 codeblock IDE 上运行,请在构建日志中查看如果 main 返回 0 它通常会显示
Process terminated with status 0
否则它会以红色显示状态代码,这意味着发生了错误
【讨论】: