在C+;中的函数退出时返回值+; 是不是在C++中代码>主())/代码>不需要包含返回0;
它是否仅适用于在C+;中的函数退出时返回值+; 是不是在C++中代码>主())/代码>不需要包含返回0;,c++,c++11,iso,C++,C++11,Iso,它是否仅适用于main或任何非无效函数 它在C++11中是新出现的还是一直都是这样 理由是什么 是不是在C++中代码>主())/代码>不需要包含返回0; 对 它只适用于main函数还是任何非void函数 它仅适用于main() 它在C++11中是新出现的还是一直都是这样 不,一直都是这样 理由是什么 该语言的向后兼容性(以及与C的兼容性)最有可能。(重点是我的): main中的return语句具有离开main函数的效果 (销毁任何具有自动存储持续时间的对象)并调用 以返回值作为参数退出如果控制流
main
或任何非无效函数
它在C++11中是新出现的还是一直都是这样
理由是什么
是不是在C++中代码>主())/代码>不需要包含<代码>返回0;<代码>
对 它只适用于main函数还是任何非void函数 它仅适用于main()
它在C++11中是新出现的还是一直都是这样
不,一直都是这样
理由是什么
该语言的向后兼容性(以及与C的兼容性)最有可能。(重点是我的):
main中的return语句具有离开main函数的效果
(销毁任何具有自动存储持续时间的对象)并调用
以返回值作为参数退出如果控制流关闭
复合语句的结尾是main,效果相当于
操作数为0的返回(另请参见[except.handle])
它似乎一直在C++标准中(也在C中,从C99开始,参见C99规范5.5.2.2.3)。 它仅适用于
main()
函数
不过,我不知道最初的理由。它可能是“通过在main()。这在ISO标准中有定义:
3.6.1/5:main
中的return
语句具有退出main
功能(销毁任何具有自动存储持续时间的对象)的效果,并且
使用返回值作为参数调用std::exit
。如果控制
到达main的结尾时未遇到return语句
效果是执行返回0代码>
此特殊行为仅适用于main()
,因为main()
是一个返回int
的函数,本标准定义了一般规则:
6.6.3/2从函数末尾流出相当于没有值的返回;这将导致未定义的行为
值返回函数
现在,事情总是这样吗?Bjarne Stroutsturp在C++程序设计语言中,在1986版之前,早在任何标准化之前就提出了这一点。在他教程章节的大多数示例中,main()
不返回值,在早期版本的第82页,他指出:
按照惯例,如果程序正常终止,main()返回0
否则为非零,因此返回错误数
很好地完成了这一点
附加备注
然而,在这本书中,从例子和公司的解释中,这个规则是隐含的;在Stroustrup的《C++ 1994》的设计和演化中,他没有明确地提出一个通用的、不规则的规则:<代码>主代码()/>代码>。p>
需要注意的是,在C89中,在没有显式返回值的情况下,原则仍然是未定义的行为,直到C99到达。但是在C++98中,当前默认返回0的规则已经形式化了。所以我认为这不是为了与C向后兼容。“不需要”!=“不应该”这个词一直被使用,你到底是什么意思?main()
不需要这样做。这取决于您,它是可选的。那么,如果它不是必需的,我为什么要包括它呢?只是好奇。“阿空加瓜山是的,它是不允许的:你是指与C++ 98?@罗西的向后兼容性,我一般是指C++语言。当然,在C99(我想)中添加了与标准C隐式<代码> 0返回<代码>的兼容性(我想),这比C++标准化的要晚。我想在这种情况下,这种影响是相反的(或者源影响可以共享——比如说一个普通的编译器扩展,它是C++中比C更早的)。如果是这样做,可能是将C代码转换成C++,而只需将<代码>空白>代码>转换成<代码> int >代码>。它是MSVC编译器的扩展。