2010-09-06 122 views
11

某些C++编译器允许主函数具有返回类型void。但是操作系统是否需要返回int类型的值来指定程序是否结束?C++ void返回类型main()

+18

你从哪里学到的? C++要求'main'具有'int'的返回类型。 – 2010-09-06 14:25:44

+6

这是第N次发布此链接,其中N是一个非常大的整数。 http://www2.research.att.com/~bs/bs_faq2.html#void-main但它永远不会帮助:-( – dirkgently 2010-09-06 14:33:28

+4

@dirkgently:“但它永远不会帮助”...我希望它至少帮助N人:)。 – 2010-09-06 14:43:05

回答

26

C++确实不是允许main有一个void返回类型。公布的C++标准要求它是int。一些C++编译器允许您使用void,但这不推荐。一般来说,操作系统并不关心其中一种方式。一个特定的操作系统可能需要一个程序来给出返回值,但它不一定必须来自main的返回值。如果C++编译器允许void,那么它可能提供了一些指定程序退出代码的其他方法。

4

C++标准不允许main()具有返回类型的void。尽管如此,大多数编译器都会让它通过。

5

main返回void被接受向后兼容,但它是不合法的。

在这种情况下,退出代码将为0.您仍然可以使用退出功能更改退出代码。

19

C++允许主要功能有返回类型为void

不,不。

C++标准只需要2种不同类型的主签名。如果返回类型为int,可以选择添加其他人。

允许void返回类型的C++实现在C++标准方面是不正确的。

C++ 03标准S. 3.6.1-2:

一种实现不应预定义的主要功能。 该功能不得超载。它应该有一个返回类型为int的类型,否则它的类型是实现定义的。 所有的实现应允许主要是以下定义都 :

int main() { /* ... */ } 
int main(int argc, char* argv[]) {/* ... */ } 

如果你想移植的C++代码,或写出好的C++的例子,那么你应该总是使用以上两个变化之一。

1

这就是为什么void main()不被标准C++允许 - 尽管一些编译器(例如gcc)确实允许它。

简而言之:总是使用int main(),永远不会void main()。

+0

gcc允许它为C,但是禁止它用于C++,即使你告诉它它是-fpermissive。 – BatchyX 2010-09-06 16:15:24

3

在从主返回的void合法(而非C++)的语言中,OS在正常(非例外)程序终止时通常会看到0的返回值。

0
But doesn't OS require int type value returned to specify whether program 
ended well or not? 

为什么总是这样?在双击图标时,在窗口上,该过程在结束后死亡。操作系统不检查返回类型。即使在linux上,如果您只是将二进制文件作为./runBinary运行,它也会运行并退出。操作系统本身不显示消息失败或成功。

以上所有答案都是正确的,标准说它是int,但是一些编译器也允许void。

0

根据编译器的不同,您可能可以使用void main函数,但正确的方式(即真正标准的兼容编译器应该遵循的)是返回int,其中0表示很好的&干净出口,你的程序做错了什么。