前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言 main 函数到底怎么写是对的?

C语言 main 函数到底怎么写是对的?

作者头像
Power7089
发布2020-07-26 20:24:23
1.4K0
发布2020-07-26 20:24:23
举报

各位,C语言中的main函数大家都再熟悉不过了,这是你学习C语言首先就要学习的东西,但是我看过很多人写的代码包括我们的一些读者在main函数的写法方面版本很多,今天就跟大家聊一聊main函数到底应该怎么写的问题。

首先来看main函数的多种写法

代码语言:javascript
复制
main( )

这种写法没有返回值,没有参数。其实这种写法使用现在的编译器编译时会警告,但查了一下在C89标准中是可以的,而且由于函数没有显式声明返回类型那么编译器会将返回值默认为int的缘故,其返回值也为int。

代码语言:javascript
复制
void main(  )

这种写法返回值为void,没有参数。我一直比较好奇这种样式是怎么来的,main函数的返回值要作为程序退出的状态,声明为void在程序退出后,退出情况就不得而知了。查了C89/C99/C11相关文档,都没有提到任何这种写法的痕迹,我见过最多的写法就是这种,不清楚为什么有这么多初学者这么写。严格来说返回值为void是不正确的。

代码语言:javascript
复制
int main(  )

这种写法返回值为int,没有参数。这么写的人也不少,不过有一点要提醒一下大家:虽然声明没有参数,但是实际调用却可以传参,关于这个知识点就不多讲了,有疑问的可以留言我们私下交流。

代码语言:javascript
复制
int main(void)

这种写法返回值为int,参数为void。这是最常见的一种写法了。形参为void,表明它在调用的时候不能传入任何参数,那么它也就不能获取命令行参数了。

代码语言:javascript
复制
int main(int argc,char *argv[])

这种写法返回值为int,有两个参数,第一个入参为命令行参数个数,第二个入参为命令行参数数组。此种写法也比较常见,通常用于实现需要从命令行获取参数的功能。

代码语言:javascript
复制
int main(int argc,char *argv[],char *envp[]

这种写法返回值为int,有三个参数,分别为命令行参数个数,命令参数数组,环境变量数组。实际上它就比第五个多一个参数,用于获取环境变量,但全局变量environ可以代替envp的作用 ,因这种形式的存在也是比较尴尬,不太建议。

到底应该使用哪种

前面写了这么多,那到底哪种是对的呢?其实官方标准已经给出了这个问题的答案,C89/C99/C11标准文档中只提供了以下两种main函数的写法:

代码语言:javascript
复制
int main(void) int main(int argc, char *argv[])

至于上面说的其他的写法都是不符合标准的。当然如果你使用其他的写法,不同的编译器产生的结果是未定义的,但可以肯定的是常规的编译器对于以上两种标准的写法肯定是比较支持的。

综上所述,为了代码的通用可移植性,建议采用标准提供的形式:不需要命令行参数可采用第四种,需要命令行参数采用第五种。大家还是要在标准规矩内行事,毕竟畏法度者最自由,写代码如此,其他方面也是如此,好了,就讲这么多吧。

各位,main函数怎么写你现在明白了吗?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员阿甘 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档