c语言主函数的位置及其作用是什么意思,c语言中main函数的位置是什么?

在c语言中,main函数可以放在任意位置。在执行一个c语言编写的程序时,main函数就相当于是执行程序的入口。只要是没有语法和逻辑上的错误,main函数可以放在任意位置。

fa9462d89292d3e606331af3f1458bef.png

main函数,又称主函数,是C程序的入口函数,即程序的执行是从main函数开始,对其他函数的调动也是直接或间接地在main函数中被调用。那么main函数又是被谁调用呢?

答案是操作系统。

C语言发展至今,对main函数有多种不同的写法,下面就来探究一下各种不同的写法。注:测试环境为Ubuntu 17.10,GCC版本为7.2.0。

NO.1main(){}

例:#include

main(){

printf("Hello World\n");

}

8a619e8840d3f7770990208b4a7908eb.png

NO.2void main(){}

例:#include

void main(){

printf("Hello World\n");

}

e29b35e47c7833092e25990239cfff3f.png

NO.3int main(){}

例:#include

int main(){

printf("Hello World\n");

return 0;

}

ccb8b479bae6ab154eaa302b96611885.png

NO.4int main(void){}

例:#include

int main(void){

printf("Hello World\n");

return 0;

}

b032dac2c068804e9ad4ed9f4a6829eb.png

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

例:#include

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

printf("Hello World\n");

return 0;

}

afef0d5585d5f8f11f3ad0c16554af16.png

NO.6int main(int argc,char **argv){}

例:#include

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

printf("Hello World\n");

return 0;

}

15a5e34e8f5e2d4ebf93abe27f62d03a.png

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

fb5754c0bc39fa9b82f0139063cf6236.png

从标准文档中可以看出,写法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[0]代表程序名,argv[1]到argv[argc-1]代表程序参数。下面再看看main函数的返回值问题,见下图

ee40fda6ae6596d94f6d813b536042f2.png

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

更多web开发知识,请查阅 HTML中文网 !!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值