为什么在某些C++编译器中使用int main()时不需要包含return语句?Turbo C++有什么不同吗?
main
函数的末尾,则该函数会隐式返回0
。void main()
(并且让运行时“转换”为返回0的int main()
),而不是为了遵守返回规则而出现奇怪的例外。但也许这只是我的想法。 - syammain
函数必须返回一个int
类型的值。尽管一些编译器,例如Turbo C++,可能允许其他的返回值,比如void main
,但这是错误的,绝不要使用这种方式。
然而,在C++中,如果你没有明确在main
函数中返回值,则默认返回0
。
C++11 §3.6.1 Main function第5节
在
main
函数中的返回语句会使该函数退出(销毁所有自动存储期对象)并调用std::exit函数,并将返回值作为参数传递给该函数。如果程序执行到main
函数结尾时没有遇到任何返回语句,则默认执行return 0;
。
return 0;
请注意,对于C语言而言,这仅受C99及更高版本的支持,但不被C89支持。return
语句,main
函数将返回0
。来自C++标准草案第3.6.1
节第5
段的说明:
return statement in main has the effect of leaving the main function (destroying any objects with automatic storage duration) and calling std::exit with the return value as the argument. If control reaches the end of main without encountering a return statement, the effect is that of executing
return 0;
在 C99
草案标准的第 5.1.2.2.3
节中写道:
如果 main 函数的返回类型与 int 类型兼容,则从 main 函数的初始调用返回等同于使用 main 函数返回的值作为其参数调用 exit 函数;10)到达终止 main 函数的 } 返回值为 0。
据我所知,Turbo C++ 的最后一个版本相当老,我找不到任何定义它支持哪个标准(如果有的话)的内容。
除了符合任意语言标准之外,当主函数结束时返回值没有强制性的理由。
这只是因为流行操作系统上的进程有一个已终止进程的返回代码概念。很容易想象一个不需要返回任何值的操作系统。您还可以想象一个世界,在该世界中,除非另有规定,否则所有进程都隐式地返回0 -- 在这种情况下,您可以将返回代码决策委托给系统调用。(实际上,这样的系统调用已经以C的exit函数的形式存在)。
正如其他人所说,有些编译器不需要你明确地写出 return 0;
,但如果可能的话,这总是一个好主意。我不建议使用任何禁止你从主函数返回的编译器。
我想指出的是,int main 的返回值非常重要,实际上有用处。
main 函数的返回值有时被称为程序的 退出状态
或 错误代码
,其中零表示程序成功完成。其他程序和脚本可以访问此代码以确定您的程序是否成功完成。
void main
并为您返回 0。 - chris