前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为什么是int main()而不是void main()

为什么是int main()而不是void main()

作者头像
对弈
发布2019-09-04 16:06:22
3.4K0
发布2019-09-04 16:06:22
举报

C/C++ 小误区:void main()

这是基于我们学校老师一直使用void main(),而发的感慨,大一学习C语言时,我就在想,老师上课演示的为什么一直用void main(),而不是int main()呢?不为了偷懒?还是习惯性的语句呢?在查阅了部分大牛的博客,翻阅了C Primer Plus和C++ Primer Plus这两本圣经级别的书本之后,得出以下结论(有一部分是别人的结论,属于半转载),可能不太严谨,请多多包涵。

其实,当前,很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的,C/C++中从来没有定义过void main( ), C++ 之父本贾尼·斯特劳斯特卢普 在他的主页上的FAQ 中明确地写着The definition void main( ) { /* ... */ } is not and never has been C++, nor has it even been C.(void main( )从来就不存在于C++或者C)下面我分别说一下C和C++标准中对main函数的定义

1. C

C89 中,main( ) 是可以接受的的经典巨著(C程序设计语言第二版)用的就是main( )不过在最新的C99 标准中,只有以下两种定义方式是正确的:

int main( void )

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

如果不需要从命令行中获取参数,请用int main(void);否则请用int main( int argc, char *argv[] )

main函数的返回值类型必须是int,这样返回值才能传递给程序的调用者(如操作系统)

如果main函数的最后没有写return语句的话,C99规定编译器要自动在生成的目标文件中(如exe文件)加入return 0;,表示程序正常退出不过,我还是建议大家最好在main函数的最后加上return语句,虽然没有这个必要,但这是一个好的习惯注意,vc6不会在目标文件中加入return 0;,大概是因为vc6是98年的产品,所以才不支持这个特性现在明白我为什么建议你最好加上return语句了吧!

2. C++

正如C++ Primer Plus这本书中说的C++98中定义了如下两种main函数的定义方式:

int main( )

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

int main( )等同于C99中的int main( void );int main( int argc, char *argv[] )的用法也和C99中定义的一样同样,main函数的返回值类型也必须是int如果main函数的末尾没写return语句,C++98规定编译器要自动在生成的目标文件中加入 return 0;同样,vc6也不支持这个特性。

3.关于void main

在C和C++中,不接收任何参数也不返回任何信息的函数原型为void fun(void);可能正是因为这个,所以很多人都误认为如果不需要程序返回值时可以把main函数定义成void main(void)然而这是错误的!main函数的返回值应该定义为int类型,C和C++标准中都是这样规定的虽然在一些编译器中,void main可以通过编译(如vc6),但并非所有编译器都支持void main,因为标准中从来没有定义过void main中如果main函数的返回值不是int类型,就根本通不过编译发出警告,所以,如果你想你的程序拥有很好的可移植性,请一定要用int main

4.返回值的作用

main函数的返回值用于说明程序的退出状态如果返回0,则代表程序正常退出;返回其它数字的含义则由系统决定,而在通常情况下,返回非零代表程序异常退出。

5. 那么 int main( int argc, char *argv[], char *envp[] ) 呢?

这当然也不是标准 C/C++ 里面定义的东西!char *envp[] 是某些编译器提供的扩展功能,用于获取系统的环境变量因为不是标准,所以并非所有编译器都支持,故而移植性差,不推荐使用

*********************************************************************************

如果您觉得不够权威,自己查阅C Primer Plus和C++ primer plus 这两本书吧!!!

声明:本文为原创,作者为 对弈,转载时请保留本声明及附带文章链接:http://www.duiyi.xyz/%e4%b8%ba%e4%bb%80%e4%b9%88%e6%98%afint-main%e8%80%8c%e4%b8%8d%e6%98%afvoid-main/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

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