为什么是int main()而不是void main()
这里写目录标题
- 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()相关推荐
- int main()与void main()区别?
在学习C语言的过程中,会习惯性的将int main()写为void main(),两者有什么区别? 1.int main() 在 C99 标准中,有两种正确的使用方式: int main( void ...
- int main() 与 void main()
从大一入学刚接触C到现在已满7个月了,虽然刚开始就知道```int main```才是标准的写法,但一直没有深刻理解为什么不能用```void main```而必须使用```int main```. ...
- int main()和void main()的区别
int main() 括号里面为空代表不确定参数,并不是说不带参数.如果要告诉编译器函数不带参数,做法是:int main(void) int main()需要返回一个整形值,也就是我们经常会看到在这 ...
- 下列程序的运行结果是 #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 % ...
- void main 和 int main的区别
main是一切(控制台)程序都必须有的一个入口函数 main函数是否有返回值在绝大多数情况下无关紧要 因为main函数体内的代码一旦运行完毕 这个程序就结束了 int main() 主函数返回的值是0 ...
- int main()与void main()的区别
在C语言中,看到有的程序是int main,有的程序是void main,不清楚什么时候该使用哪个,,,看完我的文章,保证秒懂( ̄∀ ̄) 首先要了解 int是整形函数,void表示无, main表示头 ...
- int main()和void main()
void main 和 int main的区别就是有无返回值. 在int main 可以出现非 int 类型的东西.在写代码时,一个函数要么有返回值,要么没有返回值没有返回值就用void来表示. ma ...
- int main()和void main()有什么区别
其实main也是一个函数: #include<stdio.h> void main(){} 如上代码所示,void main() 这样定义只是说明main函数没有返回值. #include ...
- 浅谈c/c++中main(),int main(),void main(),int main(void)四者之间的区别
一.主函数也是函数 首先我们要了解C/C++中函数的定义,因为main函数也是函数,与其他函数的区别只是主函数是程序的主线而已,程序从它开始也在其中结束.一个函数由函数名.其前的类型标识符.其后小括号 ...
最新文章
- 流程的python-读《流畅的python》第一天
- List、Set、Map的区别
- 数学建模学习笔记——拟合算法
- Android线程间通信之handler
- CentOS安装Chrome
- tensorflow数据增强
- 1153 Decode Registration Card of PAT (25分)
- 计算平面坐标某点(x,y)与原点(0,0)的角度
- php curl header_PHP中的yield与协程(二十一节)
- 操作系统学习之用C语言模拟LRU算法
- linux 内核4.12,Linux Kernel 4.12 发布,最新的稳定版内核
- 示例演示公告通知标题无缝向上滚动,文字段落无缝向上滚动,简单的wangeditor富文本编辑器,简单的音乐播放demo...
- 「06」回归的诱惑:一文读懂线性回归(Python实战篇)
- Android中的Can't create handler inside thread that has not called Looper.prepare()异常
- Linux内核的netpoll框架与netconsole
- HTTP请求详细过程
- 企业使用邮箱的重要性
- Mac计算查看文件Md5
- 君生我未生,我生君已老
- excel公式编辑器_快速智能的制作电子表格,除了excel还有这些优秀的软件值得拥有...