为什么不鼓励在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()
?这有什么问题?
答案 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
。