共有回帖数 0 个
-
在C语言中,main函数必须是int型的,而且正常退出时必须返回0。
测试结果:
[selian@ArchLinuxPC ~]$ printf "int main(){}" main.c
[selian@ArchLinuxPC ~]$ gcc -o main main.c
[selian@ArchLinuxPC ~]$ ./main
[selian@ArchLinuxPC ~]$ echo $?
84 // 返回值不为0说明程序是异常退出的
[selian@ArchLinuxPC ~]$ printf "int main(){return 0;}" main.c
[selian@ArchLinuxPC ~]$ gcc -o main main.c
[selian@ArchLinuxPC ~]$ ./main
[selian@ArchLinuxPC ~]$ echo $?
0 // 正常退出
但是在C++中:
[selian@ArchLinuxPC ~]$ printf "int main(){}" main.cpp
[selian@ArchLinuxPC ~]$ g++ -o main main.cpp
[selian@ArchLinuxPC ~]$ ./main
[selian@ArchLinuxPC ~]$ echo $?
0 // 正常退出
[selian@ArchLinuxPC ~]$ printf "int main(){return 0;}" main.cpp
[selian@ArchLinuxPC ~]$ g++ -o main main.cpp
[selian@ArchLinuxPC ~]$ ./main
[selian@ArchLinuxPC ~]$ echo $?
0 // 正常退出
C语言版main(){}的反汇编:
8048374: 55 push %ebp
8048375: 89 e5 mov %esp,%ebp
8048377: 5d pop %ebp
8048378: c3 ret
C++版main(){}的反汇编:
8048454: 55 push %ebp
8048455: 89 e5 mov %esp,%ebp
8048457: b8 00 00 00 00 mov $0x0,%eax
804845c: 5d pop %ebp
804845d: c3 ret
可见C++为没有返回值的main自动加上了mov $0x0,%eax,即返回值设为0,而C++没有设置寄存器EAX的值,返回值为任意数。
结论:在C语言中main函数必须写上return 0;而C++中可以不用写了。
更正:4F的应该是 "C语言没有设置寄存器EAX的值,返回值为任意数" 。
[selian@ArchLinuxPC ~]$ printf "int main(){}" main.c
[selian@ArchLinuxPC ~]$ gcc -o main main.c
[selian@ArchLinuxPC ~]$ ./main
[selian@ArchLinuxPC ~]$ echo $?
84
实际的返回值就不是0。
而且反汇编main之前的代码也没有置eax为0的。
楼主 2015-12-24 21:10 回复
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
意见反馈 |
关于直线 |
版权声明 |
会员须知