QQ3208919269 揭秘嵌入式C语言main函数的写法原因

但凡是学过c语言的人,都知道要先写main函数,然而很多时候我们看到的main函数却各有差异,这究竟是为啥?哪种是对的呢?今天我们就来揭秘嵌入式c语言main函数的写法原因。
那么main函数一共有多少个版本呢?
1、main()
直接的mian()并没有返回值,没有入参。这种写法实际来说,部分编译器会显示警告,并且会返回默认值为int。不过在c89标准中其实是可以的,由于没有声明返回类型,所以才会返回默认值int。
2、void main()
初学者经常会使用的形式,但是并不知道来源在哪,在c89/c99/c11等文档中都没有提到这种形式的痕迹。这种写法的返回值是void,没有参数。值得注意的是,一旦声明是void,在程序退出后,想要获取其退出状态也就不可以了。所以还是不建议返回值为void的。
3、int main(void)
比较常见的写法,这种写法的形参为void,表明它在调用的时候不能传入任何参数,那么它也就不能获取命令行参数了。
4、int main ()
和上面第3种看起来好像没啥区别,但是还是有些许不同。就下面例子来说:
#include
void test();
int main()
{
test(4);
return 0;
}
void test(int a)
{
printf(%d,a);
}
程序仍然可以正常运行,test函数虽然声明为无入参,但调用时却是可以传入任何参数或不传参数的。
5、int main(int argc,char *argv[])
int argc入参为命令行参数个数,char *argv[]入参为命令行参数数组。这种写法也比较常见的,主要用在需要从命令行获取参数的功能。
6、int main(int argc,char *argv[],char *envp[])
包含三个参数的一种写法,上面第5种的升级版,int argc是命令行参数个数,char *argv[]是命令参数数组,char *envp[]是环境变量数组。虽然只比第六种多了一个参数,但全局变量environ可以代替envp的作用,获取或者设置环境变量可以使用getenv或putenv,因此也没有必要使用该形式。这种写法多源于编译器的扩展。
上面写了这么多种写法,那么到底写哪种才算是对的?
查阅标准文档,里面明确固定了两种写法:
int main(void) { /* ... */ }
int main(int argc, char *argv[]) { /* ... */ }
所以说,其他的写法并不符合标准,有些算是历史遗留有些算是编译器的扩展,还有些不知道从哪里生出来的。
所以说了这么多,为了代码的通用可移植性,建议采用标准提供的形式,还是推荐使用标准文档中规定的这两种写法。如果一个函数确定无需传入任何参数,那么用void限定是一个不错的选择。

2021UDE展启幕 佳能携手海信展示消费级8K影像解决方案
如何制作一个可以为您的游戏中时光倒流添加动作的设备
用于激光光束整形的二元光学元件设计
从华为P10看黑科技,这才是华为真正的水平
稳定币的问题怎样来解决
QQ3208919269 揭秘嵌入式C语言main函数的写法原因
漏电保护器跳闸是什么原因
努比亚Z17和华为P10哪个值得买? 各方面对比分析
启动热敏电阻的知识指南
昔有上海滩现有华强北 华强北以后会怎么样
物联网时代,我们需要怎样的存储
国产骨传导耳机哪个好,性价比高的骨传导蓝牙耳机推荐
空间站为什么只“飞”400公里高?
交流稳压器的最低工作电压以及其对设备运行的影响
什么是VPN?如何应对VPN安全风险
稳压器的安装方法 和变压器的区别
737Max复飞 欧盟将在2021年1月份批准
一加5、锤子T3 、努比亚Z13最新消息:8G内存+骁龙835+技术革新,小米6颤抖吧
Viasystems在PCB工厂升级上花费了多少
无人驾驶汽车的工作原理和特点详细说明