在C89 / C99 / C11中,在独立环境中,入口点功能是实现定义的。在托管环境中,必须在严格一致的程序中int main
。大多数现代编译器都会使void main
出错。但是,我看到许多用户使用void main
。即使在不合格的编译器中允许它,为什么要使用它?我认为void main
首选int main
没有实际理由。即使在C89中,离开return
也是未定义的行为。
void main
的受欢迎程度是否有历史原因?
我不相信我的问题主要是基于意见的。在这个帖子中已经提出了一些有效的想法,比如微软的void main
扩展,以及Window的受欢迎程度,以及它是C书重印不正确信息的结果。这些是客观和历史原因。
答案 0 :(得分:11)
void main的流行是否有历史原因?
在我看来,历史原因是在C标准被采用之前编写了关于C编程的书籍(尤其是普及版本),并且在标准通过之后(甚至之前)发表。很多关于C语言编程的书都包含main的声明,返回类型为void。有时这些书籍在没有修改内容的情况下重新出版。并且由于旧的编译器通常支持使用void的声明,这种声明很受欢迎。
也许是一些编译器生产者(甚至可能是微软。正如你所知C#允许用void声明Main。至少Borland C ++允许使用void main)引入了他们自己的实现定义的main声明。而main with void是一个流行的实现定义声明。因此,关于C语言编程的书籍通常会将这些流行的编译器与其实现定义的主要声明一起引用。
答案 1 :(得分:6)
引用伦丁的answer,
如果您的程序在无主机环境中运行(您的程序是 嵌入式系统或操作系统),它可能有任何回报 类型。 void main()是最常见的。
如果您的程序在托管环境(在操作系统之上)运行, main()必须返回int,并且可能有其他参数。
由于OP询问托管环境,我可以引用Keith的answer,
类似地,C从未允许void main()而不是 延期;与引入void关键字的1989标准相同 为main定义了两个标准定义:int main(void)和int main(int argc,char * argv [])。
和Pochi的answer,
您通常想知道程序的退出状态。那就是 为什么你有int main() - 你返回退出状态。
从这两个令人信服的答案中,我可以在我的拙见中得出结论:
在C89 / C99 / C11时,C可能没有允许void main
,但对于由爱好者和学习者以及初学者创建的小程序,他们可能不会关注此处的返回值阶段,因此void main
变得流行。
答案 2 :(得分:3)
如果您正在使用* NIX或MAC,请执行以下操作
将以下代码复制到test1.c
void main() {
}
在命令行中编译代码
cc test1.c
gcc test.c
运行以下
./a.out
运行以下(这将显示程序返回的内容
echo $?
将此代码保存到test2.c
void main() {
int i = 5;
}
对test2.c重复2,3和4
这就是为什么不推荐它。
它为何受欢迎?我不知道上面的答案。我确实有一个问题;是使用void main()
或int main()
?
答案 3 :(得分:-3)
写void main()
会减少输入,因为它可以在没有警告的情况下省略return 0;
。
P.S。就个人而言,我只写int main()
。