楼主:
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; 程式也是正常的
为何会这样呢?
谢谢各位!
你试试看 sum = 那行后面加上其他程式码实验看看像是随便 printf("hello");
这是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吧?
我想编译器最后是处理加法,使用到 eax 储存 sum刚好回传值也是读 eax 暂存器,所以答案会对
我记得会有novoid function reach...的warning
语言都已经提供抽象化了,为什么还是有人爱用特定编译器实作反过来解释呢?暂存器那位
原 PO 问什么在 "这个状况" 下会刚好对,就猜测可能原因啊。如果问 "这样写可能有问题, 怎么改比较好?" 就会给建议
作者: cysppol (PPOL) 2014-06-16 23:21:00
这情况是uninitial memory read,可以正常执行,但是回传值未知。
作者: longlongint (华哥尔) 2014-07-04 10:12:00
没写return通常是传0或是传eax吧