什么是void main()错了?

App*_*ker 17 c++ standards program-entry-point entry-point

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

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

static void main(String[] args) /* Java */
static void Main(string[] args) /* C# */
Run Code Online (Sandbox Code Playgroud)

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

这是其他语言(只打算是,我怀疑C++会成功在这十年中,至少)C的可能接班人++像d编程语言或瓦拉也允许void main().正如您所看到的,我怀疑C++社区是否将其从标准中删除,因为它过于模糊或不受欢迎.

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

Kei*_*son 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开头).


Gre*_*ill 10

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

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

因此,选择void main()C++标准会"错误"的是它会破坏预期使用的现有代码return和退出代码值main().

  • 我没有参加早期的C++标准会议,但我怀疑委员会真的选择了什么:从一开始就使用返回值是C++的一部分,因为它本质上是C的扩展.C本质上也使用有一个`int`返回(虽然通常是隐式声明的:你可以先放弃`int`而编译器只是假设这就是你的意思),以便有一种方法可以自动告诉程序是否成功.如果程序的结果为"void",则不表示它是否成功. (2认同)

Poc*_*chi 8

您通常想知道程序的退出状态.这就是为什么你有int main()- 你返回退出状态的原因.