19

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

现在,据我了解,C# 和 Java 都允许入口点的返回类型为voidie

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

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

其他语言(仅打算成为,我怀疑 C++ 至少会在这十年中取得成功)C++ 的可能继任者,如 D 编程语言或 Vala 也允许使用void main(). 如您所见,我怀疑 C++ 社区将其从标准中删除,因为它太晦涩或不受欢迎。

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

4

4 回答 4

15

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

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

因此,选择void main()C++ 标准的“错误”之处在于它会破坏预期使用的现有代码return以及main().

于 2012-02-25T07:30:32.730 回答
11

C++从未允许void main(),尽管一些编译器可能允许它作为扩展或仅仅因为他们不诊断它。

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

其他语言允许这样做,因为它们是其他语言。

能够写void main()而不是int main(). 你甚至不需要显式地返回一个值;从末尾脱落main相当于return 0;(在 C++ 中,在从 C99 开始的 C 中)。

于 2012-02-25T07:24:07.030 回答
9

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

于 2012-02-25T07:21:07.153 回答
4

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

于 2012-02-25T07:21:27.370 回答