就在昨天,我报名了专业技能证书《单片机的设计与开发》,于是呢就重新下载了江科大的51单片机的学习资料,想要重新认真学习51单片机(因为最近在准备的嵌入式比赛,所以在学32)。然后在文件里看到了一本书《c常见的问题》,书里有一个目录叫“void main()正确吗?” 吸引到我,心想着有时间去看一下。
因为第一次接触c语言是在学习51单片机,在视频中,老师和江科大的main函数都是用void所定义的,而真正学c语言的时候main是用int所定义的。当时认为可能是KILL4软件中要用void,vs上要用int吧!。但是今天带着好奇心在vs上试了一下,发现在vs2022里这样定义编译是通过的,而且也没有警告,报错。
在KILL5里也试了,将main函数定义为int,编译器也没有警告,报错。难道是c语言书写自由,main函数定义成void或者是int都没有问题吗?为了一探究竟,我就去看了一下《c常见的问题》这本书中是怎么解释的。
可见一些编译器不支持将main函数定义成void,并且书里也说了将main函数定义成void是错误的。
百度上说”main函数的返回值必须是int,这样返回值才能传递给程序的激活者(如操作系统),有很多人都误认为如果不需要程序返回值时可以把main函数定义成void,或者是main(void)。这样定义是错误的也不利于代码的移植性“ 。
C++之父也在他的主页明确的写着void main从来就不存在在于c++或者c中。
虽然c语言书写自由,可移植,但是要有一个良好的编程习惯,这样利于代码的阅读,维护以及移植,既然C++之父都这样写了,那就根据标准来正确的定义main函数吧!