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

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

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

一、main( )

这种写法没有返回值,没有参数。

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

二、void main( )

这种写法返回值为void,没有参数。

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

三、int main( )

这种写法返回值为int,没有参数。

这么写的人也不少,不过有一点要提醒一下大家:虽然声明没有参数,但是实际调用却可以传参,关于这个知识点就不多讲了。

四、int main(void)

这种写法返回值为int,参数为void。

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

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

这种写法返回值为int,有两个参数,第一个入参为命令行参数个数,第二个入参为命令行参数数组。

此种写法也比较常见,通常用于实现需要从命令行获取参数的功能。

六、int main(int argc,char *argv[],char *envp[]

这种写法返回值为int,有三个参数,分别为命令行参数个数,命令参数数组,环境变量数组。

实际上它就比第五个多一个参数,用于获取环境变量,但全局变量environ可以代替envp的作用 ,因这种形式的存在也是比较尴尬,不太建议。


✎ 到底应该使用哪种

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

int main(void)

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

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

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

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

对于热爱编程的小伙伴来说,一个好的学习氛围是很重要的!如果你感兴趣或者有需求的话,笔者有一个编程零基础入门学习交流俱乐部,私信我【编程学习】自动获取进入学习!还有完整的学习路线图和学习文件视频,欢迎初学者和正在进阶的小伙伴们!


分享到:


相關文章: