[问题] 没return为何function会回传值?

楼主: bizza ( )   2014-06-15 22:02:11
使用 DevC++
输入1234 得到1+2+3+4
#include <iostream>
#include <cstdlib>
using namespace std;
int Test(int);
int main() {
int a;
cout <<"Enter your number: ";
cin >>a;
cout <<"Answer is "<<Test(a)<<endl;
system("Pause");
return 0;
}
int Test(int b) {
int sum;
if (b/10 >=1) {
int c = b%10;
sum = c+Test(b/10);
}
else
return b;
//return sum;
}
我是用递回写,用余数的方式去各别取输入的值
问题是,我在function里并没有实际回传最后总和值sum
可是程式却可正常执行无任何警告错误?
当然我最后加上 return sum; 程式也是正常的
为何会这样呢?
谢谢各位!
作者: loveme00835 (发箍)   2014-06-15 22:19:00
你试试看 sum = 那行后面加上其他程式码实验看看像是随便 printf("hello");
作者: littleshan (我要加入剑道社!)   2014-06-15 22:30:00
这是undefined behavior (6.6.3p2)
楼主: bizza ( )   2014-06-15 22:41:00
我在sum=后面那行随便加了一个output 答案就错了@@
作者: LPH66 (-6.2598534e+18f)   2014-06-15 23:01:00
对初学者只要知道是三楼那样就好了 (所谓的未定义行为)不需要去探究为什么它会正好是对的结果
作者: bibo9901 (function(){})()   2014-06-15 23:27:00
换新一点的编译器 应该会有warning吧?
作者: PUTOUCHANG (自己的废文自己发)   2014-06-16 01:34:00
我想编译器最后是处理加法,使用到 eax 储存 sum刚好回传值也是读 eax 暂存器,所以答案会对
作者: IhateOGC (我讨厌)   2014-06-16 08:32:00
overflow?
作者: steve1012 (steve)   2014-06-16 09:32:00
我记得会有novoid function reach...的warning
作者: loveme00835 (发箍)   2014-06-16 12:51:00
语言都已经提供抽象化了,为什么还是有人爱用特定编译器实作反过来解释呢?暂存器那位
作者: PUTOUCHANG (自己的废文自己发)   2014-06-16 20:02:00
原 PO 问什么在 "这个状况" 下会刚好对,就猜测可能原因啊。如果问 "这样写可能有问题, 怎么改比较好?" 就会给建议
作者: cysppol (PPOL)   2014-06-16 23:21:00
这情况是uninitial memory read,可以正常执行,但是回传值未知。
作者: longlongint (华哥尔)   2014-07-04 10:12:00
没写return通常是传0或是传eax吧

Links booklink

Contact Us: admin [ a t ] ucptt.com