鼓励将入口点的返回类型设置为C++中的void
,后来被标准删除并被现代编译器禁止?为什么它被认为是不良做法?
现在,据我了解,C# 和 Java 都允许入口点的返回类型void
即
static void main(String[] args) /* Java */
static void Main(string[] args) /* C# */
C#和Java程序员并不认为这是不好的做法,他们实际上经常使用它。
其他语言(只是打算成为,我怀疑至少在这十年中C++会成功(C++的可能继承者,如 D 编程语言或 Vala 也允许void main()
。所以正如你所看到的,我怀疑C++社区将其从标准中删除,因为它太晦涩或不受欢迎。
所以我的问题是,为什么C++社区删除了void main()
?这是怎么回事?
C++ 标准委员会可能选择要求int main()
,因为大量现有代码希望使用 return
语句将特定的退出代码返回到运行时系统。期望所有现有代码都更改为使用exit()
是不合理的,因此int main()
标准中提出了要求。
像Java这样的语言在设计时,没有任何需要保持兼容的现有代码体。因此,设计人员可以选择void main()
并要求对非零退出代码使用 System.exit()
。
因此,为C++标准选择void main()
的"错误"是它会破坏期望使用return
的现有代码和main()
的退出代码值。
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++中,在C中从C99开始(。
您通常想知道程序的退出状态。这就是为什么你拥有int main()
- 你返回你的退出状态。
错误的,因为这不是C++标准规定的合法main
。没有人关心其他语言指定的内容。对于C++程序,只有C++标准是相关的,它说int
.