某些C ++编译器允许main函数具有返回类型void
。但是,操作系统是否需要返回int
类型值来指定程序是否正常结束?
答案 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是一个很好的&清除退出以及表明您的程序出错的任何其他内容。