点击上方蓝字关注我们
M
a
i
n
乍一看标题,感觉小编小题大做,但凡学过C语言的聚聚,都知道C程序入口就是main函数,且一套程序里面有且仅有一个。但是很多时候我们看到的main函数却并不是千篇一律,格式竟然会有差别,这究竟是为啥?到底哪一种是对的呢?那么我们这儿来聊一聊这些所谓的main函数。
01
main()
简洁明了,直接孤零零的mian()并没有声明返回值,也没有传入形式参数。讲真如果真这么写,大部分编译器会显示警告,并且会返回值编译器默认会认为是int类型。因为在C89标准中写了,这样写是可以的,由于声明的时候没有声明返回的参数类型,所以编译器自动默认返回int类型。
02
void main()
这种形式是初学者经常会使用的形式,因为好多培训机构就是这么教的,但是大多数聚聚并不知道为什么这么写,或者说是谁规定这么写的,来源在哪儿。这里小编告诉大家,在C89/C99/C11等标准文档中都没有提到这种形式。这种形式的写法声明的返回值是void类型,没有形式参数。很明显,函数如果声明返回类型是void类型,那么在程序退出后,我们是不可以获取其退出的状态的。所以小编这么写,即声明main函数的返回值类型为void类型。
03
int main(void)
这种形式的写法也是聚聚们比较常见的写法。这种写法的形式参数类型为void型,意思程序在调用这个函数的时候不需要也不能传入任何形式的参数,这就意味着,这个函数它本身就不能获得命令行传入的参数了。
04
int main ()
不仔细看还以为小编写错了,和上面第3种看起来好像没啥区别,但是细看还是有不同的地方,形式参数没有写viod,直接空在那边。小编给大家写一段代码,当作为例子给大家讲一讲,下面的程序是可以正常运行,learn函数虽然声明为无形式参数传入,但是我们调用它时,却可以传入任何形式的形参或者直接不传任何参数。
void learn();
int main()
{ learn(4);
return 0;
}
void learn(int a)
{
printf("%d",a);
}
05
int main(int argc,char *argv[])
int argc作为形参传入命令行参数个数,char *argv[]作为形参传入命令行参数数组。这种形式的写法是比较正规的,也是C标准中推荐的写法,如果需要从命令行获取参数,那么必须这么写。
06
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中的写法,是一种不错的选择。
【AD封装】贴片铝电解系列封装(带3D)
【AD封装】USB Type-A座子系列(带3D)
【AD封装】TF(micro SD)卡座封装大全(带3D)
【AD封装】2.4G PCB天线(量产用)
【AD封装】RJ45座子(带3D)
【AD封装】DC3-2.54板端座子(带3D)
【AD封装】USB3.0板端座子(带3D)
【AD封装】LED发光二极管(带3D)
【AD封装】贴片插件电阻排阻(带3D)
【AD封装】插件压敏电阻(带3D)
【AD封装】继电器(带3D)
【AD封装】按键开关,拨码开关,拨动开关(带3D)
【AD封装】PH2.0座子插件贴片(带3D)
【AD封装】915MHz天线,GPS天线,GSM天线,433MHz天线,13.56Hz天线,LTE天线
【AD封装】FPC座子0.5mm间距1.0mm间距1.25间距(带3D)
【AD封装】贴片及插件二极管-整流桥(带3D)
【AD封装】插件电解电容,贴片电容,钽电容,独石电容(带3D)
【AD封装】VH3.96mm插件座子(带3D)
【AD封装】XH2.54mm座子插件贴片(带3D)
【AD封装】贴片插件晶振(带3D)
【AD封装】micro USB座子,Type C座子,USB-A公头(带3D)
【AD封装】三极管,MOS管,部分LDO(TO,SOT系列)(带3D)
【AD封装】贴片电感(带3D)
【AD封装】插件电感,变压器(带3D)
【AD封装】芯片IC封装-QFP,TQFP,LQFP(带3D)
【AD封装】DC电源接口、音频接口(带3D)
【不用开发板学习STM32】一般流水灯实验(文末获取代码及工程文件)
【收藏】32个EMC标准电路!!
【收藏】你应该知道的拓扑结构-开关电源,都在这里!!
【收藏】开关电源你必须知道的专业名字(中英对照)!!
【收藏】优选4层板到12层板叠层经典设计方!!
【过瘾】电机原理动态图,停不下来!!
【过瘾】各种烙铁头正确使用姿势,你get到了吗?
【较真】细说LDO旁路电容如何选!!
【较真】0欧姆电阻的妙用!!
【必看】10分钟学会看MOSFET手册!!
【AD作品】STM32F103ZET6 mini板子
【电子元器件知识普及】-电 阻
【电子元器件知识普及】-电容
【电子元器件知识普及】-二 极 管
【电子元器件知识普及】-电 感
【电子元器件知识普及】-变压器知识大盘点
【电子元器件知识普及】-必须知道的天线知识及天线图谱
【电子元器件知识普及】-美国线规AWG与公制对照表,拿走不谢~
点在看,鼓励一下小编!!