今日头条
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函数的规范写法,见下图:
从标准文档中可以看出,写法4、5、6才是main函数的规范写法。,main函数是被操作系统调用的,操作系统会根据main函数的返回值来判断程序的正确执行与否,这样是为了让C程序具有更好的移植性。写法5与写法6是等价的,第一个参数代表main函数参数的个数,第二个参数用指针分别指向这些参数。argv[0]代表程序名,argv[1]到argv[argc-1]代表程序参数,写法7在argc和argv的基础上多了一个环境变量参数,环境变量的形式是“ENV=value”,参数类型是指针数组或二级指针下面再看看main函数的返回值问题,见下图
从图中可以看出,如果main函数的返回值是int类型的兼容类型,从main函数返回后的值与exit一起相当于执行了exit xxx。xxx代表从main函数返回后的值。如果忘记写了return语句,当执行到main函数体的右大括号},会返回默认值0。返回0代表程序执行成功,程序退出。如果main函数的返回类型不是int类型的兼容类型,程序返回给操作系统的状态将会不明确。
这下对main函数是不是有一个更深入的了解了呢?
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !