C ++ void返回类型为main()

时间:2010-09-06 14:23:03

标签: c++

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

8 个答案:

答案 0 :(得分:28)

C ++ 允许main拥有void返回类型。已发布的C ++标准要求它为int。某些C ++编译器允许您使用void,但不建议这样做。通常,操作系统不关心这种或那种方式。特定操作系统可能需要程序提供返回值,但它不一定必须来自main的返回值。如果C ++编译器允许void,那么它可能提供了一些指定程序退出代码的方法。

答案 1 :(得分:20)

  

C ++允许main函数返回类型为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 ++示例,那么你应该总是使用上面两种变体之一。

答案 2 :(得分:5)

main返回void是为了向后兼容,但它不合法。

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

答案 3 :(得分:4)

C ++标准不允许main()具有返回类型void。但是,大多数编译器会因历史原因而通过它。

答案 4 :(得分:3)

在从main返回void合法(非C ++)的语言中,操作系统通常会在正常(非特殊)程序终止时看到0的返回值。

答案 5 :(得分:1)

这就是为什么标准C ++不允许使用void main() - 虽然有些编译器(例如gcc)允许它。

简化:始终使用int main(),永远不要使用main()。

答案 6 :(得分:0)

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

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

以上所有答案都是正确的,标准表示它是int,但有些编译器也允许无效。

答案 7 :(得分:0)

根据编译器的不同,您可以使用void main函数,但正确的方法(真正符合标准的编译器应遵循的方法)是返回int,其中0是一个很好的&清除退出以及表明您的程序出错的任何其他内容。