一道c语言题,新手,关于return 0的使用

#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int max(int x,int y);
int a[10],m,n,i;
printf("enter 10 integer numbers:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n");
for(i=1,m=a[0],n=0;i<10;i++)
{
if(max(m,a[i])>m)
{m=max(m,a[i]);
n=i;
}
}
printf("the lagerest number is %d\nit is the %dth number.\n",m,n+1);
}
int max(int x,int y)
{return(x>y?x:y);
}
为什么main函数最后可以不加return 0?
新手求指点

这个的看汇编,应为计算机运算都是把数据存到内存中,在到函数的时候只保留下一步要执行地址的指针,寄存器压栈以便返回使用。跳转到函数的地址去执行,此刻寄存器中的值被改写成函数的地址以及数据,当执行完成函数return POP出栈,把寄存器中的值用主函数的数据覆盖子函数的数据,返回运算结果到主函数。这样可以继续执行。执行什么语句应为已经保存了下一步要执行的地址就到那里执行去了。
通俗点,没return你子函数的值得不到(没有指针很引用传递的情况下)&函数会紊乱,已经被子函数中的数据干掉了,子函数也执行完毕----也不知道要执行什么了------程序死掉,void类型默认添加返回,帮你添加return.追问

谢谢!
那什么情况会默认添加?

追答

主函数为void或者主函数没有函数调用的情况。其实你想多了,建议你还是加上吧,要养成好的编程习惯,这是程序员必须具备的素质。 满意的话给分

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-03
#include <stdio.h>
int fun()
{
printf("ok");
}
int main()
{
int i =fun();
printf("\n%d\n",i);
}
这都可以呢。。
因该是编译器自动加上了

lwc@lwc-desktop:~/Desktop$ ./test
ok
2
lwc@lwc-desktop:~/Desktop$本回答被网友采纳
第2个回答  2012-11-03
可以不加return 0吗?很好奇。。因为自己每次都会加,没注意到这个问题。。
不过如果真的可以的话,也一定是因为编译器的原因。C语言里绝没有这样的规定。。
第3个回答  2012-11-03
因为是主函数,所以可以省略这个return 0;
相似回答