什么是void main()错了?

时间:2012-02-25 07:16:36

标签: c++ standards main entry-point

为什么不鼓励在C ++中将入口点的返回类型设置为void,后来被标准删除并被现代编译器禁止?为什么它被认为是不好的做法?

现在,据我所知,C#和Java都允许入口点的返回类型为void,即

static void main(String[] args) /* Java */
static void Main(string[] args) /* C# */

C#和Java程序员并不认为这是不好的做法,他们实际上经常使用它。

其他语言(仅意图,我怀疑C ++将在这十年中成功,至少)可能的C ++继承者,如D编程语言或Vala也允许{{1 }}。正如您所看到的,我怀疑C ++社区是否将其从标准中移除,因为它过于模糊或不受欢迎。

所以我的问题是,为什么C ++社区删除void main()?这有什么问题?

4 个答案:

答案 0 :(得分:10)

C ++有从不允许void main(),但有些编译器可能会允许它作为扩展名,或者只是因为它们不会对其进行诊断。

类似地,C除了作为扩展之外从未允许void main();引入void关键字的1989年标准定义了main的两个标准定义:int main(void)int main(int argc, char *argv[])

其他语言允许使用它,因为它们是其他语言。

能够编写void main()而不是int main()没有特别的优势。您甚至不需要显式返回值;从main的末尾开始,相当于return 0;(在C ++中,在C中以C99开头)。

答案 1 :(得分:10)

C ++标准委员会可能选择要求int main(),因为大量现有代码需要使用return语句将特定退出代码返回给运行时系统。期望所有现有代码都改为使用exit()代替,因此int main()成为标准中的要求是不合理的。

Java等语言在设计时,没有任何需要与之保持兼容的现有代码体。因此,设计人员可以选择void main()并要求使用System.exit()作为非零退出代码。

因此,为C ++标准选择void main()会“错误”的是,它会破坏预期使用return的现有代码和{{1的退出代码值}}

答案 2 :(得分:8)

您通常想知道程序的退出状态。这就是你拥有int main()的原因 - 你返回退出状态。

答案 3 :(得分:3)

这是错误的,因为这不是C ++标准指定为合法main的内容。没有人关心其他语言指定的内容。对于C ++程序,只有C ++标准是相关的,它表示int