void main() 有什么问题


为什么总是不

鼓励将入口点的返回类型设置为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 .

相关内容

  • 没有找到相关文章