42

为什么我们需要使用int main而不是void main在 C++ 中?

4

8 回答 8

42

简短的回答是因为 C++ 标准要求main()return int

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

于 2009-01-16T08:40:42.107 回答
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

这个结果状态是通过 main 的返回值来完成的。

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

int main(int argc, char *argv[]);

因为在 C 中,参数由调用者清理,main 的作者可以忽略声明或处理参数 argc 和 argv。但是,如果调用 main 的设置例程需要一个 int 返回值,但没有找到,则行为可能未定义。

简短的回答:

  • main 的返回值对脚本很有用。
  • 调用 main 的设置和清理例程需要使用一致的接口。
于 2009-01-16T08:40:55.243 回答
7

改变的主要原因

无效的主要(){}

int main() { }

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

return 0;

如果返回任何数字而不是 0,则识别程序成功执行,这意味着发生了一些错误,错误代码是 main 返回的。如果您在代码块 IDE上运行,请在构建日志中查看如果 main 返回 0 它通常会显示

Process terminated with status 0

否则它会以红色显示状态代码,这意味着发生了错误

于 2015-07-09T12:15:09.797 回答
1

来自维基百科:

从 main 函数返回的值成为进程的退出状态,尽管 C 标准仅将特定含义赋予两个值:(EXIT_SUCCESS传统上为零)和EXIT_FAILURE. 其他可能的返回值的含义是实现定义的。

于 2009-01-16T08:42:00.060 回答
0

就像在 C 中一样,因为该进程会给操作系统一个退出代码。

您可以使用

int main (int argc, char ** argv)
{
  return (0);
}

或者

int main (int argc, char ** argv)
{
  exit (0);
}

这至少在 C89 IIRC 中。

于 2009-01-16T08:41:50.653 回答
0

因为 int 是程序可以返回给操作系统的返回码。

您可以查询该值以检查操作是否成功。

这在使用命令行脚本时非常有用。

于 2009-01-16T08:41:58.940 回答
0

也许是因为使用方法中的状态代码干净地退出是有意义的main()。在 Java 中,我们必须模拟这种使用System.exit(),这并不是那么优雅。

于 2009-01-16T08:42:29.063 回答
0

当我们执行我们的程序来检查它是否成功运行时。因此,当它返回 0 表示它为 true 并成功运行,如果它返回 1 则它没有成功运行&这个int值告诉操作系统程序是否成功运行

于 2013-09-17T09:26:17.103 回答