C语言Main函数到底有几种,你真的懂吗?

本文探讨了C语言中main函数的不同形式,包括int main(void), void main(), int main(int argc, char *argv[])等。标准推荐使用带有参数的int main(int argc, char *argv[])和不带参数的int main(void)。强调了返回类型和参数的重要性,以及它们对程序可移植性和通用性的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

乍一看标题,感觉小编小题大做,但凡学过C语言的聚聚,都知道C程序入口就是main函数,且一套程序里面有且仅有一个。但是很多时候我们看到的main函数却并不是千篇一律,格式竟然会有差别,这究竟是为啥?到底哪一种是对的呢?那么我们这儿来聊一聊这些所谓的main函数。

main()

⚠ 简洁明了,直接孤零零的mian()并没有声明返回值,也没有传入形式参数。讲真如果真这么写,大部分编译器会显示警告,并且会返回值编译器默认会认为是int类型。因为在C89标准中写了,这样写是可以的,由于声明的时候没有声明返回的参数类型,所以编译器自动默认返回int类型。

void main()

⚠ 这种形式是初学者经常会使用的形式,因为好多培训机构就是这么教的,但是大多数聚聚并不知道为什么这么写,或者说是谁规定这么写的,来源在哪儿。这里小编告诉大家,在C89/C99/C11等标准文档中都没有提到这种形式。这种形式的写法声明的返回值是void类型,没有形式参数。很明显,函数如果声明返回类型是void类型,那么在程序退出后,我们是不可以获取其退出的状态的。所以小编这么写,即声明main函数的返回值类型为void类型。

int main(void)

⚠ 这种形式的写法也是聚聚们比较常见的写法。这种写法的形式参数类型为void型,意思程序在调用这个函数的时候不需要也不能传入任何形式的参数,这就意味着,这个函数它本身就不能获得命令行传入的参数了。

int main ()

⚠ 不仔细看还以为小编写错了,和上面第3种看起来好像没啥区别,但是细看还是有不同的地方,形式参数没有写viod,直接空在那边。小编给大家写一段代码,当作为例子给大家讲一讲,下面的程序是可以正常运行,learn函数虽然声明为无形式参数传入,但是我们调用它时,却可以传入任何形式的形参或者直接不传任何参数。

#include
void  learn();
int main() 
{     learn(4);
      return 0; 
}
void learn(int a)
{    
 printf("%d",a);
}

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

⚠ int argc作为形参传入命令行参数个数,char *argv[]作为形参传入命令行参数数组。这种形式的写法是比较正规的,也是C标准中推荐的写法,如果需要从命令行获取参数,那么必须这么写。

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

⚠ 这种形式的写法包含3个形式参数,当然可以看作是上面第5种写法的升级版,int argc形式参数是传入命令行参数个数,char *argv[]形式参数是传入命令参数数组,char *envp[]形式参数是传入环境变量数组。这种写法只比第5种多了一个参数,但我们可以通过全局变量environ代替envp的作用,可以使用getenv或putenv变量来获取或者设置环境变量,因此在没有特别说明或者是需求的情况下,没有必要写成这种形式。

总结,拜读了大神们的帖子及文章,通过查阅C89/C99/C11标准文档再次确认,里面明确给出了2种标准的写法:

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

小编写了这么多,就是想告诉大家,想要提高代码的通用性及可移植性,小编建议大家采用以上2种形式来敲我们的main函数。如果确定一个函数不需要传入任何形式参数,那么按照第3中的写法,是一种不错的选择。

声明:

本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值