void main()有什么问题? 为什么在C++中设置入口点返回到Value/Cord>总是被劝阻,后来被标准移除,被现代编译器禁止?为什么这被认为是不好的做法

void main()有什么问题? 为什么在C++中设置入口点返回到Value/Cord>总是被劝阻,后来被标准移除,被现代编译器禁止?为什么这被认为是不好的做法,c++,standards,main,entry-point,C++,Standards,Main,Entry Point,现在,据我所知,C#和Java都允许入口点的返回类型为void static void main(String[] args) /* Java */ static void Main(string[] args) /* C# */ 和java程序员不认为这是一个很差的实践,他们通常使用它。 其他语言(仅打算,我怀疑C++在这十年内会成功,至少)C++的可能继承者,如D编程语言或VRA,也允许无效()/。因此,你可以看到,我怀疑C++社区从标准中删除它,因为它太晦涩或不受欢迎。 我的问题是,为什

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

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

和java程序员不认为这是一个很差的实践,他们通常使用它。 <>其他语言(仅打算,我怀疑C++在这十年内会成功,至少)C++的可能继承者,如D编程语言或VRA,也允许<代码>无效()/<代码>。因此,你可以看到,我怀疑C++社区从标准中删除它,因为它太晦涩或不受欢迎。


我的问题是,为什么C++社区删除了<>代码>空()/<代码>?有什么问题吗?

您通常想知道程序的退出状态。这就是为什么你有<代码> int()/>代码——你返回你的退出状态。

它是错误的,因为这不是C++标准指定的合法的<代码>主< /代码>。没有人关心其他语言指定了什么。对于C++程序,只有C++标准是相关的,它说 INT/COM>。

< P> C++从来没有允许Valuy()/Cuth>,尽管有些编译器可能允许它作为一个扩展,或者仅仅因为它不诊断它。 类似地,C除了作为扩展之外,从未允许
void main()
;1989年引入
void
关键字的同一标准定义了
main
的两个标准定义:
int main(void)
int main(int argc,char*argv[])

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


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

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

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


<> P> >选择C++的标准> >空主()/<代码>,将是“错误的”,即它会破坏现有代码,期望使用<代码>返回< /代码>和从代码>主代码()/代码>退出代码值。< / P>不同的语言设计者做出不同的决定。这有什么关系?@GregHewgill我明白。但是,C++设计者的决定因素和原因是什么?直接从马的嘴里说:)实际上,问题是错误的:假设程序中的结果至少表示成功或失败是一件好事,并在C创建的上下文中使用(UNIX工具经常使用此指示)。问题应该是:为什么Java和C#社区取消了指示(和授权)项目成功的能力?这实际上隐含地回答了
void main()
的问题:程序没有结果。另外,
void main()
没有被删除:它从未被添加。我认为使用异常是首选的方法。如果程序抛出指示“经典”错误状态的异常,则内置错误处理程序应为您返回“经典”返回代码等效值。手工操作是非常多余的。不过,您仍然可以在Java中使用类似exit(retcode)的函数。你可以创建自己的顶级C++块来返回代码,然后使用Exchange(…)。问题,换句话说,为什么它会这么说?@ Soufia:问题问为什么它不成立。只有C++标准是相关的。LOL,从这里我收集到 C++标准= =最新的神遗嘱< /Cord>如果你正在编写C++程序,那么,是的,我明白了。因此,他们选择了
intmain()
与现有代码兼容。哈哈,我应该知道…:DI没有参加早期的C++标准会议,但我怀疑委员会真的选择了什么:返回值的使用是C++的一部分,从一开始就因为它本质上是C的扩展,本质上也用于<代码> int <代码>返回。(虽然通常是隐式声明的:您可以在开始时去掉
int
,编译器只会假设这就是您的意思)有一种自动判断程序是否成功的方法。如果程序的结果是
void
,这并不能说明它是否成功。事实是+1。然而,尽管从未被允许,即使是比亚恩·斯特劳斯特鲁普自己也写过
void main
,即在第二版中(也可能是在第一次,我没有检查)“C++编程语言”。它只是一个模因,就像许多其他的随意的和通常不好的约定。@阿尔夫:我刚刚检查了Tc++PL的第二版(第九打印,我想),没有看到任何引用“代码>空隙主())。
--虽然至少有一次出现了带有隐式
int
返回类型的
main()