C语言子程序定义了返回类型,未return,为何能返回值
#include "stdio.h"
void main()
{
float a[]={1,2,3,4,5,6};
float b;
unsigned length=6;
b=sum(a,length);
printf("数值%f",b);
}
float sum(float a[],unsigned length)
{
int i;
float result =0;
for(i=0;i<=length-1;i++)
{
printf("%d",i);
}
}
这个程序, 我没有写return 返回值,可是编译运行后居然返回了值 6
这是为什么。 反汇编进入CALL后 发现:
004010B0 > 55 push ebp
004010B1 8BEC mov ebp, esp
004010B3 83EC 48 sub esp, 48
004010B6 53 push ebx
004010B7 56 push esi
004010B8 57 push edi
004010B9 C745 F8 0000000>mov dword ptr [ebp-8], 0
004010C0 C745 FC 0000000>mov dword ptr [ebp-4], 0
004010C7 EB 09 jmp short 004010D2 //循环开始
004010C9 8B45 FC mov eax, dword ptr [ebp-4] // 取出i的值
004010CC 83C0 01 add eax, 1 //eax累加 循环结束后 是6
004010CF 8945 FC mov dword ptr [ebp-4], eax
004010D2 8B4D 0C mov ecx, dword ptr [ebp+C]
004010D5 83E9 01 sub ecx, 1
004010D8 394D FC cmp dword ptr [ebp-4], ecx
004010DB 77 13 ja short 004010F0 //循环结束 跳出循环
004010DD 8B55 FC mov edx, dword ptr [ebp-4]
004010E0 52 push edx
004010E1 68 24404200 push 00424024 ; ASCII "%d"
004010E6 E8 25000000 call printf
004010EB 83C4 08 add esp, 8
004010EE ^ EB D9 jmp short 004010C9
有点乱。然后回到主程序 EAX被当做返回值 也就是6, 我想知道这是编译器的有意为之?还是纯粹是个巧合?
void main()
{
float a[]={1,2,3,4,5,6};
float b;
unsigned length=6;
b=sum(a,length);
printf("数值%f",b);
}
float sum(float a[],unsigned length)
{
int i;
float result =0;
for(i=0;i<=length-1;i++)
{
printf("%d",i);
}
}
这个程序, 我没有写return 返回值,可是编译运行后居然返回了值 6
这是为什么。 反汇编进入CALL后 发现:
004010B0 > 55 push ebp
004010B1 8BEC mov ebp, esp
004010B3 83EC 48 sub esp, 48
004010B6 53 push ebx
004010B7 56 push esi
004010B8 57 push edi
004010B9 C745 F8 0000000>mov dword ptr [ebp-8], 0
004010C0 C745 FC 0000000>mov dword ptr [ebp-4], 0
004010C7 EB 09 jmp short 004010D2 //循环开始
004010C9 8B45 FC mov eax, dword ptr [ebp-4] // 取出i的值
004010CC 83C0 01 add eax, 1 //eax累加 循环结束后 是6
004010CF 8945 FC mov dword ptr [ebp-4], eax
004010D2 8B4D 0C mov ecx, dword ptr [ebp+C]
004010D5 83E9 01 sub ecx, 1
004010D8 394D FC cmp dword ptr [ebp-4], ecx
004010DB 77 13 ja short 004010F0 //循环结束 跳出循环
004010DD 8B55 FC mov edx, dword ptr [ebp-4]
004010E0 52 push edx
004010E1 68 24404200 push 00424024 ; ASCII "%d"
004010E6 E8 25000000 call printf
004010EB 83C4 08 add esp, 8
004010EE ^ EB D9 jmp short 004010C9
有点乱。然后回到主程序 EAX被当做返回值 也就是6, 我想知道这是编译器的有意为之?还是纯粹是个巧合?
...全文
相关推荐
关于C语言中return的一些总结
关于C语言中return的一些总结,doc
关于C语言的return用法 最详细的
最详细的C语言的return用法 对于新学的人 或者 了解不深的人可以看下 里面已经整理好 看着不会感觉到乱
C语言中getchar()的返回类型为什么是int详解
主要给大家介绍了关于C语言中getchar()的返回类型为什么是int的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
c语言return用法
详细的return用法,各类使用方法都在其中
C语言中return的作用.pdf
C语言中return的作用.pdf


