2 u012732857 u012732857 于 2014.11.30 11:41 提问

比较两个相等的函数里,当给两个不相等参数时,系统为什么会自动返回x的值呢??
c++

int fun(int a,int b)
{
if(a == b)
{
return a;
}
}

void main()
{
int x = 20,y =10;
int z = fun(x,y);
cout<<z<<endl;
}
fun函数里,没有给出,当两个参数不相等的返回情况,那么系统为什么会自动返回x的值呢??请各位大神帮帮我

5个回答

xuzuning
xuzuning   Ds   Rxr 2014.11.30 13:57
已采纳

由于不相等时没有给定返回值,所以将返回栈顶值
如果此时栈是空的,则返回最后一次出栈是的值
而函数的参数是逆序入栈的

u012732857
u012732857 说的有道理,可能是这个原因,厉害
3 年多之前 回复
eagleyan
eagleyan   Rxr 2014.11.30 12:15

这只是巧合,其实系统会随机返回一个值。你的编译器可以把栈顶的x值作为返回值给你了,想我的系统(C++ 4.2.1 Apple LLVM 6.0)就返回了一个32767.

u012732857
u012732857 恩恩,谢谢,我用的VC++,它不是随机值,每次都会打印X的值
3 年多之前 回复
91program
91program   Ds   Rxr 2014.11.30 18:03

没有指定返回值,也是会有返回值的。

有一个分支没有返回,编译时会有警告的。假如没有返回,在 main 中的表达式就不会成立,也应该是编译的错误。所以编译器为了避免出现这样的情况,在没有返回值的分支上会返回默认值。

u012732857
u012732857 但是它的默认值是什么呢,我试了,给X,Y分别换不相同的值,编译器都会打印出X的值
3 年多之前 回复
qishiheyongshi
qishiheyongshi   2014.11.30 20:52

按照我的逻辑分析这段代码会报错,至少用myeclipse或者eclipse会报错,fun方法声明 的返回值是int的,但是你的方法有可能没返回值,C++的编译器是什么我不知道

u012732857
u012732857 哦哦,我用的VC++6.0 编译时没有错误的,不过还是谢谢你回答
3 年多之前 回复
starytx
starytx   Rxr 2014.12.09 14:46

要就这种不符合编程规则的东西没有多大意义,本来这样的代码就是有隐患的,知道避免写这样的代码就行了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!