这里写目录标题

  • C/C++ 小误区:void main()
  • C
  • C++
  • 关于void main
  • 返回值的作用
  • 那么 int main( int argc, char *argv[], char *envp[] ) 呢?

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函数的定义

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语句了吧!

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也不支持这个特性。

关于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

返回值的作用

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

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

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


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

声明:本文为原创,作者为 对弈,转载时请保留本声明及附带文章链接:
原文连接

为什么是int main()而不是void main()相关推荐

  1. int main()与void main()区别?

    在学习C语言的过程中,会习惯性的将int main()写为void main(),两者有什么区别? 1.int main() 在 C99 标准中,有两种正确的使用方式: int main( void ...

  2. int main() 与 void main()

    从大一入学刚接触C到现在已满7个月了,虽然刚开始就知道```int main```才是标准的写法,但一直没有深刻理解为什么不能用```void main```而必须使用```int main```. ...

  3. int main()和void main()的区别

    int main() 括号里面为空代表不确定参数,并不是说不带参数.如果要告诉编译器函数不带参数,做法是:int main(void) int main()需要返回一个整形值,也就是我们经常会看到在这 ...

  4. 下列程序的运行结果是 #include <stdio.h> void main() { int x = 10, y = 20, z = 30;

    1.直接运行程序得出结果 #include <stdio.h>void main() {int x = 10, y = 20, z = 30;printf("%d %d %d % ...

  5. void main 和 int main的区别

    main是一切(控制台)程序都必须有的一个入口函数 main函数是否有返回值在绝大多数情况下无关紧要 因为main函数体内的代码一旦运行完毕 这个程序就结束了 int main() 主函数返回的值是0 ...

  6. int main()与void main()的区别

    在C语言中,看到有的程序是int main,有的程序是void main,不清楚什么时候该使用哪个,,,看完我的文章,保证秒懂( ̄∀ ̄) 首先要了解 int是整形函数,void表示无, main表示头 ...

  7. int main()和void main()

    void main 和 int main的区别就是有无返回值. 在int main 可以出现非 int 类型的东西.在写代码时,一个函数要么有返回值,要么没有返回值没有返回值就用void来表示. ma ...

  8. int main()和void main()有什么区别

    其实main也是一个函数: #include<stdio.h> void main(){} 如上代码所示,void main() 这样定义只是说明main函数没有返回值. #include ...

  9. 浅谈c/c++中main(),int main(),void main(),int main(void)四者之间的区别

    一.主函数也是函数 首先我们要了解C/C++中函数的定义,因为main函数也是函数,与其他函数的区别只是主函数是程序的主线而已,程序从它开始也在其中结束.一个函数由函数名.其前的类型标识符.其后小括号 ...

最新文章

  1. 流程的python-读《流畅的python》第一天
  2. List、Set、Map的区别
  3. 数学建模学习笔记——拟合算法
  4. Android线程间通信之handler
  5. CentOS安装Chrome
  6. tensorflow数据增强
  7. 1153 Decode Registration Card of PAT (25分)
  8. 计算平面坐标某点(x,y)与原点(0,0)的角度
  9. php curl header_PHP中的yield与协程(二十一节)
  10. 操作系统学习之用C语言模拟LRU算法
  11. linux 内核4.12,Linux Kernel 4.12 发布,最新的稳定版内核
  12. 示例演示公告通知标题无缝向上滚动,文字段落无缝向上滚动,简单的wangeditor富文本编辑器,简单的音乐播放demo...
  13. 「06」回归的诱惑:一文读懂线性回归(Python实战篇)
  14. Android中的Can't create handler inside thread that has not called Looper.prepare()异常
  15. Linux内核的netpoll框架与netconsole
  16. HTTP请求详细过程
  17. 企业使用邮箱的重要性
  18. Mac计算查看文件Md5
  19. 君生我未生,我生君已老
  20. excel公式编辑器_快速智能的制作电子表格,除了excel还有这些优秀的软件值得拥有...

热门文章

  1. C++文件操作——按行读取txt文本文件
  2. linux usb root_hub中断传输
  3. Netapp 磁盘、盘柜、控制器固件升级总结
  4. 文娱行业搜索最佳实践
  5. Vue如何提交表单数据
  6. assemblyScript:一款前端的高效运算wasm工具
  7. 命令行下查看出口IP(你上网时暴露在公网上的IP地址)
  8. 算法谜题1----狼羊菜过河
  9. 2022-2028全球与中国问答平台市场现状及未来发展趋势
  10. KGH: NO ACCESS内存分配过大,引起的ORA-4031故障