苏州建站公司 诚找苏州聚尚网络,备案号是哪个网站,设计网站的关键点,iis的网站登录没反应乍一看标题#xff0c;感觉小编小题大做#xff0c;但凡学过C语言的聚聚#xff0c;都知道C程序入口就是main函数#xff0c;且一套程序里面有且仅有一个。但是很多时候我们看到的main函数却并不是千篇一律#xff0c;格式竟然会有差别#xff0c;这究竟是为啥#xff1… 乍一看标题感觉小编小题大做但凡学过C语言的聚聚都知道C程序入口就是main函数且一套程序里面有且仅有一个。但是很多时候我们看到的main函数却并不是千篇一律格式竟然会有差别这究竟是为啥到底哪一种是对的呢那么我们这儿来聊一聊这些所谓的main函数。main⚠ 简洁明了直接孤零零的mian并没有声明返回值也没有传入形式参数。讲真如果真这么写大部分编译器会显示警告并且会返回值编译器默认会认为是int类型。因为在C89标准中写了这样写是可以的由于声明的时候没有声明返回的参数类型所以编译器自动默认返回int类型。void main⚠ 这种形式是初学者经常会使用的形式因为好多培训机构就是这么教的但是大多数聚聚并不知道为什么这么写或者说是谁规定这么写的来源在哪儿。这里小编告诉大家在C89/C99/C11等标准文档中都没有提到这种形式。这种形式的写法声明的返回值是void类型没有形式参数。很明显函数如果声明返回类型是void类型那么在程序退出后我们是不可以获取其退出的状态的。所以小编这么写即声明main函数的返回值类型为void类型。int mainvoid⚠ 这种形式的写法也是聚聚们比较常见的写法。这种写法的形式参数类型为void型意思程序在调用这个函数的时候不需要也不能传入任何形式的参数这就意味着这个函数它本身就不能获得命令行传入的参数了。int main ⚠ 不仔细看还以为小编写错了和上面第3种看起来好像没啥区别但是细看还是有不同的地方形式参数没有写viod直接空在那边。小编给大家写一段代码当作为例子给大家讲一讲下面的程序是可以正常运行learn函数虽然声明为无形式参数传入但是我们调用它时却可以传入任何形式的形参或者直接不传任何参数。#include
void learn();
int main()
{ learn(4);return 0;
}
void learn(int a)
{ printf(%d,a);
}
int main(int argc,char *argv[])⚠ int argc作为形参传入命令行参数个数char *argv[]作为形参传入命令行参数数组。这种形式的写法是比较正规的也是C标准中推荐的写法如果需要从命令行获取参数那么必须这么写。int main(int argc,char *argv[],char *envp[]⚠ 这种形式的写法包含3个形式参数当然可以看作是上面第5种写法的升级版int argc形式参数是传入命令行参数个数char *argv[]形式参数是传入命令参数数组char *envp[]形式参数是传入环境变量数组。这种写法只比第5种多了一个参数但我们可以通过全局变量environ代替envp的作用可以使用getenv或putenv变量来获取或者设置环境变量因此在没有特别说明或者是需求的情况下没有必要写成这种形式。总结拜读了大神们的帖子及文章通过查阅C89/C99/C11标准文档再次确认里面明确给出了2种标准的写法int main(void) { /* ... */ }
int main(int argc, char *argv[]) { /* ... */ }
小编写了这么多就是想告诉大家想要提高代码的通用性及可移植性小编建议大家采用以上2种形式来敲我们的main函数。如果确定一个函数不需要传入任何形式参数那么按照第3中的写法是一种不错的选择。声明本文于网络整理版权归原作者所有如来源信息有误或侵犯权益请联系我们删除或授权事宜。