use*_*281 16 c standards program-entry-point
在C89/C99/C11中,在独立环境中,入口点功能是实现定义的.在托管环境中,它必须int main符合严格的程序.大多数现代编译器都会void main出错.但是,我看到很多用户使用void main.即使在不合格的编译器中允许它,为什么要使用它?我认为没有任何实际理由void main可以优先考虑int main.即使在C89中,它也是未定义的行为return.
是否有人气的历史原因void main?
我不相信我的问题主要是基于意见的.一些有效的想法已经在这个帖子中提出过,例如微软的void main扩展,以及Window的受欢迎程度,以及它是C书重印不正确信息的结果.这些是客观和历史原因.
Vla*_*cow 11
void main的流行是否有历史原因?
在我看来,历史原因是在C标准被采用之前编写了关于C编程(特别是populer)的书籍,并且在标准通过之后(甚至之前)发表.很多关于C语言编程的书都包含main的声明,返回类型为void.有时这些书籍在没有修改内容的情况下重新出版.并且由于旧的编译器通常支持使用void的声明,这种声明很受欢迎.
也许是一些编译器生产者(甚至可能是微软.正如你所知C#允许用void声明Main.至少Borland C++允许使用void main)引入了他们自己的实现定义的main声明.而main with void是一个流行的实现定义声明.因此,关于C编程的书籍通常会将这些流行的编译器与其实现定义的主要声明一起引用
引用伦丁的回答,
如果您的程序在无主机环境中运行(您的程序是嵌入式系统或操作系统),则它可能具有任何返回类型.void main()是最常见的.
如果您的程序在托管环境中运行(在操作系统之上),则main()必须返回int,并且可能具有其他参数.
由于OP询问托管环境,我可以引用Keith的回答,
类似地,C除了作为扩展之外从未允许void main(); 引入void关键字的1989标准定义了main的两个标准定义:int main(void)和int main(int argc,char*argv []).
和Pochi的回答,
您通常想知道程序的退出状态.这就是为什么你有int main() - 你返回退出状态的原因.
从这两个令人信服的答案中,我可以在我的拙见中得出结论:
在C89/C99/C11时,C可能不允许void main,但对于由爱好者和学习者以及初学者创建的小程序,他们可能不关心此阶段的返回值,因此void main变得流行.