C语言main函数的写法
main函数是C程序的入口函数即程序的执行是从main函数开始对其他函数的调动也是直接或间接地在main函数中被调用。那么main函数又是被谁调用呢答案是操作系统。C语言发展至今对main函数有多种不同的写法下面就来探究一下各种不同的写法。注测试环境为Ubuntu 17.10GCC版本为7.2.0。NO.1main(){}例#include main(){ printf(Hello World\n); }NO.2void main(){}例#include void main(){ printf(Hello World\n); }NO.3int main(){}例#include int main(){ printf(Hello World\n); return 0; }NO.4int main(void){}例#include int main(void){ printf(Hello World\n); return 0; }NO.5int main(int argc,char *argv[]){}例#include int main(int argc,char *argv[]){ printf(Hello World\n); return 0; }NO.6int main(int argc,char **argv){}例#include int main(int argc,char **argv){ printf(Hello World\n); return 0; }从上面的测试来看写法1在C90标准下可以正常编译而在C99和C11标准下会抛出一个警告不写返回值默认的返回值为int也就相当于写法1和写法3等价。写法2-6在C90、C99、C11标准下均能正常编译。在这么多写法中到底哪一些才是main函数的标准写法于是查阅了C标准文档对main函数的规范写法见下图从标准文档中可以看出写法4、5、6才是main函数的规范写法。写法5与写法6是等价的。那为什么又会有写法1、2、3呢那是因为从1972年C语言被设计出来到C90标准发布这段时间对C语言不同的实现就导致了对main函数的差异性。强烈不推荐写法2因为main函数是被操作系统调用的操作系统会根据main函数的返回值来判断程序的正确执行与否如果返回void那代表的是什么状态呢而且一些编译器支持这种写法一些编译器不支持所有的标准并未认可这种写法。对于写法1和写法3还勉强能够接受不过也不建议这样写最好还是按照标准写法来写。为什么要按照标准写法来写那是因为为了让C程序具有更好的移植性。写法5与写法6是等价的第一个参数代表main函数参数的个数第二个参数用指针分别指向这些参数。argv代表程序名argv到argv代表程序参数。下面再看看main函数的返回值问题见下图从图中可以看出如果main函数的返回值是int类型的兼容类型从main函数返回后的值与exit一起相当于执行了exit xxx。xxx代表从main函数返回后的值。如果忘记写了return语句当执行到main函数体的右大括号}会返回默认值0。返回0代表程序执行成功程序退出。如果main函数的返回类型不是int类型的兼容类型程序返回给操作系统的状态将会不明确。