为什么在某些 C++ 编译器中使用 int main() 时不需要包含 return 语句?那么 Turbo C++ 呢?
7 回答
在 C++ 以及 C99 和 C11 中,如果控制流到达函数末尾main
,则函数隐式返回是该语言的特殊规则0
。
在 C++ 和 C99/C11 中,main 函数中没有 return 语句,默认返回 0;
§ 3.6.1 主要功能
main 中的 return 语句具有离开 main 函数(销毁具有自动存储持续时间的任何对象)并以返回值作为参数调用 std::exit 的效果。如果控制到达main末尾没有遇到return语句,效果就是执行return 0;
还阅读 wiki 页面 C/C++ 主要功能
如果程序员没有定义返回值,则隐式返回 0;在 main() 函数的末尾由编译器插入;这种行为是 C++ 标准所要求的。
main
必须返回一个int
,一些编译器,包括 Turbo C++,可能允许其他返回值,特别是void main
,但这是错误的,永远不要使用它。
但是在 C++ 中,如果您没有显式返回 in 的值main
,则与 return 0;
C++11 §3.6.1 主函数第 5 节
main 中的 return 语句具有离开 main 函数(销毁具有自动存储持续时间的任何对象)并以返回值作为参数调用 std::exit 的效果。如果控制到达main的末尾没有遇到return语句,效果就是执行
return 0;
请注意,对于 C,这仅在 C99 及更高版本中受支持,而 C89 不支持。
标准说如果没有声明main
就会返回。从草稿 C++ 标准部分段落:0
return
3.6.1
5
main 中的 return 语句具有离开 main 函数(销毁任何具有自动存储持续时间的对象)并以返回值作为参数调用 std::exit 的效果。如果控制到达main的末尾没有遇到return语句,效果就是执行
return 0;
C99
部分标准草案5.1.2.2.3
说:
如果 main 函数的返回类型是与 int 兼容的类型,则从初始调用到 main 函数的 return 等价于以 main 函数返回的值作为参数调用 exit 函数;10)到达 }终止主函数返回值 0。
据我所知,Turbo C++的最后一个版本已经很老了,我找不到任何定义它支持的标准的东西。
无论您是否明确指定,TC 都会返回 EXIT_SUCCESS
除了符合任意语言标准之外,没有令人信服的理由在 main 函数结束时返回一个值。
这只是因为流行操作系统上的进程有一个已终止进程的返回码的概念。不难想象操作系统不需要返回任何值。您还可以想象一个世界,其中 0 由所有进程隐式返回,除非以其他方式覆盖——在这种情况下,您可以将返回代码决策委托给系统调用。(其实这样的系统调用已经以C的exit函数的形式存在了)。
正如其他人所说,一些编译器并不要求你明确地return 0;
但是,它总是一个好主意(如果可能的话)。我不鼓励使用任何不允许您从主函数返回的编译器。
我想指出, int main 的返回值非常重要,而且实际上是有用的。
main 的返回值有时称为程序的exit status
or error code
,零表示它已成功完成。其他程序和脚本可以访问此代码以确定您的程序是否成功完成。