探究一下C语言中main函数各种不同的写法

今日头条

1095人已加入

描述

main函数是C程序的入口函数,即程序的执行是从main函数开始,对其他函数的调动也是直接或间接地在main函数中被调用。那么main函数又是被谁调用呢?答案是操作系统。C语言发展至今,对main函数有多种不同的写法,下面就来探究一下各种不同的写法。

无参数版本:

NO.1

main(){}

NO.2

void main(){}

NO.3

int main(){}

NO.4

int main(void){}

有两个参数版本:

NO.5

int main(int argc,char *argv[]){}

NO.6

int main(int argc,char **argv){}

有三个参数版本:

No.7

int main(int argc, char* argv[], char* envp[])

写法1在C90标准下可以正常编译,而在C99和C11标准下会抛出一个警告(不写返回值,默认的返回值为int,也就相当于写法1和写法3等价)。写法2-6在C90、C99、C11标准下均能正常编译。在这么多写法中,到底哪一些才是main函数的标准写法?于是查阅了C标准文档对main函数的规范写法,见下图:

C语言C语言

从标准文档中可以看出,写法4、5、6才是main函数的规范写法。,main函数是被操作系统调用的,操作系统会根据main函数的返回值来判断程序的正确执行与否,这样是为了让C程序具有更好的移植性。写法5与写法6是等价的,第一个参数代表main函数参数的个数,第二个参数用指针分别指向这些参数。argv[0]代表程序名,argv[1]到argv[argc-1]代表程序参数,写法7在argc和argv的基础上多了一个环境变量参数,环境变量的形式是“ENV=value”,参数类型是指针数组或二级指针下面再看看main函数的返回值问题,见下图

C语言

从图中可以看出,如果main函数的返回值是int类型的兼容类型,从main函数返回后的值与exit一起相当于执行了exit xxx。xxx代表从main函数返回后的值。如果忘记写了return语句,当执行到main函数体的右大括号},会返回默认值0。返回0代表程序执行成功,程序退出。如果main函数的返回类型不是int类型的兼容类型,程序返回给操作系统的状态将会不明确。

这下对main函数是不是有一个更深入的了解了呢?


审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分