ANU*_*OYI 16 c c++ program-entry-point
为什么main()用户定义了功能?
我什么时候会使用void main()和int main()?
Lun*_*din 39
编辑这个答案并不尽可能完整,因为它并没有真正解决这个奇怪的句子"或者以某种实现定义的方式".我现在写了一个更完整的答案,也解决了C90,C11和C++.编辑结束
这是C标准所说的(ISO C 9899:1999):
5.1.2.1独立环境
在独立环境中(可以在没有操作系统任何好处的情况下执行C程序),程序启动时调用的函数的名称和类型是实现定义的./ .. /程序终止在独立环境中的影响是实现定义的.
5.1.2.2托管环境
不需要提供托管环境,但如果存在,则应符合以下规范.
5.1.2.2.1程序启动
程序启动时调用的函数名为main.该实现声明此函数没有原型.它应该使用int的返回类型定义,并且没有参数:
int main(void){/*...*/}
或者有两个参数(这里称为argc和argv,虽然可以使用任何名称,因为它们是声明它们的函数的本地名称):
int main(int argc,char*argv []){/*...*/}
C++标准中的文本或多或少相同.请注意,文本中的"程序启动"是托管环境的子条款.
这意味着:
如果您的程序在无主机环境中运行(您的程序是嵌入式系统或操作系统),则它可能具有任何返回类型.void main()是最常见的.
如果您的程序在托管环境中运行(在操作系统之上),则main()必须返回int,并且可能具有其他参数.
返回类型main由实现决定,而不是程序员.检查编译器文档以查看合法签名的用途main.不要以为那void main()是其中之一.在托管环境中,main通常返回int.在自由标准环境中,入口点甚至可能不会被命名main,但其返回类型仍将由实现决定,而不是程序员.
Sha*_*fiz -1
许多编译器不支持 void main(),因此您应该始终使用 int main()。