我在c ++编程语言的介绍中找到了int main
定义,但没有void main
。我试着阅读所有用c ++编程语言介绍的文章。
答案 0 :(得分:6)
void main
在C或C ++中从未有效。
C ++11§3.6.1/ 5:“实现不得预定义
main
函数。此功能不应过载。它应具有类型int
的返回类型,否则其类型是实现定义的。所有实现都应允许main
的以下两个定义:int main() { /* ... */ }
和
int main(int argc, char* argv[]) { /* ... */ }
...
“
return
中的main
语句具有离开main
函数(销毁具有自动存储持续时间的任何对象)并调用{{1}的效果以返回值作为参数。如果控件到达std::exit
的末尾而没有遇到main
语句,则效果是执行return
值0是表示处理成功的一个值。来自return 0;
的值EXIT_SUCCESS
可以是0或其他值。值<stdlib.h>
表示进程失败。
答案 1 :(得分:4)
使用void main
不是标准的,尽管有一些关于为什么某些编译器允许它的历史。
以下内容来自programingforums.org上的2008年帖子:
1971年,Denis Ritchie(与Ken Thomson一起工作 开发Unix)产生了一个新的B&#34;通过添加对角色的支持 类型,并修改早期B编译器输出机器代码。在 1972年,&#34;新B&#34;更名为C.预处理器于1973年左右加入 团队中的另一位程序员制作了便携式I / O. package&#34;,后来被重命名为C&#34;标准I / O例程&#34;。 因此C的第一个版本诞生了:它只支持char, 整数和指针类型。没有void关键字。
Denis Ritchie和Brian Kernighan共同努力提升C.后来 C版本引入了更多的标准库,例如 malloc() - 最初返回指向char的指针,因为没有 无效指针。因此,在C的早期版本中始终需要 从malloc()转换返回。对浮点的支持也是如此 添加。这就是所谓的Kernighan和Ritchie(K&amp; R)C。
在20世纪80年代早期,决定批准C作为标准, 导致1989年第一个ANSI标准的发展(当时 在1990年被批准为ISO标准)。在委员会进程中领先 根据标准,进行了一些改动:特别是空白 引入了关键字,功能原型的形式发生了变化。
在标准化过程中,有几个商业编译器 发达。 其中一些支持void main()作为解决办法 关于从main()结束掉下来的编译器诊断。他们游说 C标准不支持这种做法,但是没有成功 没有被接受,因为其他供应商认为它没有显着增加 或有用的新功能。 后来,在20世纪90年代初,当&#34;标准 遵守&#34;成为一种营销工具,他们释放了律师 标准,并发现了 - 他们随后声称的措辞循环孔 - 允许void main()被视为标准。
在C标准化过程中,Bjarne Stroustrup开始工作 关于C ++的开发,并发布了ARM(Annotated Reference 手册)与玛格丽特埃利斯在1990年。由于这是同时发生的 与void main()相关的小混乱,这个特征是 永远不是C ++的一部分。 ARM是开发C ++的基础 标准,最终由ANSI于1998年批准,ISO于1999年批准。
在制定1999 C标准期间,进行了一些讨论 关于void main(),但它从来没有获得牵引力 - 推动支持 是政治性的,显然它提供了总体共识 技术效益不大。 明确表示1999 C标准 不允许它。