C语言main函数的正确写法

大家好,我是嵌入式老林,从事嵌入式软件开发多年,今天分享的内容是c语言main函数的正确写法,希望能对你有所帮助
摘要:最近有粉丝说他是在校大学生,刚学c语言,看到main函数写法很多种,不知道哪种写法是对的,很是苦恼,想知道c语言的main函数到底标准写法是哪一种。说实话,一开始被问这个问题,一时半会儿也是回答不上来,平时做项目,也没仔细关注过这个。这不特意去学习了一下,也整理了一下,供参考。检测一下,你是否知道c语言main函数的这几种写法有何区别呢?
一、main函数的介绍想必学过c语言的都知道,c程序的入口就是main函数,整个程序从main函数开始执行,在main函数中结束。实际上c程序可以没有main函数,入口函数可自行指定。
在嵌入式软件开发中,其实程序不是从main函数开始执行的,在main函数执行之前,会有硬件初始化,内存分配,汇编等,后面才执行到main函数。看一下嵌入式启动程序的汇编,你就会发现main函数是在汇编代码中绑定了,执行完汇编后,会跳转到main函数,所以在绑定main函数的地方,改成其他函数,那就会执行完汇编后,从该函数开始执行。
二、main函数的几种写法2.1 方式一无返回值,无参数。
在c89标准中,这种写法是可以接受的,但用现在的编译器编译时,会报警告,并且会将其返回值默认为int。如果函数没有显式声明返回类型,编译器会将返回值默认为int。
#include main(){ printf(hello,world!\\r\\n);}2.2 方式二返回值为void,无参数
main函数执行完后,返回0,则表示程序正常结束;若返回非0数值,则表示异常退出,通常由系统决定。一旦声明为void,在程序退出后,想要获取其退出状态也就不可以了。因此不建议其返回值为void。
#include void main(){ printf(hello,world!\\r\\n);}2.3 方式三返回值为int,参数为void
这是一种比较常见的写法,有返回值,返回值显式声明为int类型,返回0,则表示程序正常结束;若返回非0数值,则表示异常退出。参数为void,表示调用的时候,不能传入参数,也就不能获取命令行参数了。
#include int main(void){ printf(hello,world!\\r\\n); return 0;}2.4 方式四返回值为int,没有参数
这种方式和第三种方式没啥差别
#include int main(){ printf(hello,world!\\r\\n); return 0;}网上很多帖子用这个例子来说明,int main() 和int main(void)的区别,个人觉得不太恰当(可能是我没理解透,如有错误请指正goutou),此处的test的在函数定义是有形参的,只是声明时没有写形参(印象中函数的声明,可以不加形参的名字,加形参类型即可,但试了一下下面的例子,test声明时,没有加形参也没问题)而已,故而能传参。但int main()函数在定义时就没有形参,怎么能传参呢?此处有点纳闷
2.5 方式五返回值为int,有两个参数
这也是最常见的写法,第一个参数为命令行参数个数,第二个为命令行参数内容。通常用于实现需要从命令行获取参数的功能。
第一个参数argc,即argument count,即参数个数。第二个参数argv,即argument value,保存和传递参数的值。argv[0]是传给main函数的第一个参数,也就是可执行程序本身的名字#include int main(int argc, char *argv[]){ int i; for (i=0; i < argc; i++) { printf(argument %d is %s.\\n, i, argv[i]); } return 0;}这种写法和int main(int argc, char **argv)是等价的
这是在windows下执行的,gcc编译后,在windows下生成 .exe
可以看到,没有通过命令行传入参数时,也会有一个参数打印出来,就是可执行程序本身,这是默认的;后面传入参数后,可看到打印出来的参数
2.6 方式六返回值为int,有三个参数
和第五种差不多,只是多了一个参数,用于获取环境变量,这种形式多源于编译器扩展。但全局变量environ可以代替envp的作用,获取或者设置环境变量可以使用getenv或putenv,因此也没有必要使用该形式。
#includeint main(int argc, char *argv[], char *envp[]){ int i; for (i=0; i < argc; i++) { printf(argument %d argv is %s, envp:%s.\\n, i, argv[i], envp[i]); } return 0;}执行结果
三、总结c语言main函数有那么多种写法,那么平时到底该用哪中写法呢。我们来看看c标准文档,提供了两种main函数写法
c标准只提供了两种main的形式,建议平时写的时候使用标准形式。

远程IO系统:提升酿酒厂生产效率与品质的关键因素
怎样使用配置文件修改镜像源
现制现售水在线监管系统
PCB电路板/SMT流水线配套UVLED固化灯的应用表现
台电幻影x好不好 性价比超高的随身数据仓
C语言main函数的正确写法
残余电压保护复位电路
怎样才能推动区块链应用落地速度
利用视觉+语言数据增强视觉特征
汽车电子市场竞争加剧 大战一触即发
电路板制造的过程有哪一些名词需要了解
谷歌Chrome全新二维码分享网址功能上线 网址长度限制为84个字符
2025年NB-IoT将占据全球物联网蜂窝连接的45%,成为主导的连接技术
IHS:AMOLED增长将成为显示行业亮点
NS4871 AB类桥式输出音频功率放大器概述、特性及应用
怎样把树莓派作为完全无线路由器
TA8759BN管脚功能定义图
如何租用魔兽世界服务器
亚运会和亚残运会惊艳亮相,宇树机器狗引领行业技术发展
AMD RX 6700 XT显卡详细参数