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

问题描述

比较两个相等的函数里,当给两个不相等参数时,系统为什么会自动返回x的值呢??
int fun(int aint b)
{
if(a == b)
{
return a;
}
}

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

解决方案

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

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

解决方案三:
没有指定返回值,也是会有返回值的。

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

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

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

时间: 2024-10-28 19:09:27

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

C语言指针在这个函数里发生了怎样的变化?

问题描述 C语言指针在这个函数里发生了怎样的变化? 从键盘任意输入10个整数,用指针变量作函数参数编程计算最大值和最小值,并返回它们所在数组中的位置.函数原型如下所示: int FindMax(int num[], int n, int *pMaxPos);//函数返回最大值,pMaxPos返回最大值所在的下标 int FindMin(int num[], int n, int *pMinPos);//函数返回最小值,pMaxPos返回最小值所在的下标 程序运行结果示例: Input 10 nu

php的类里可以有两个构造函数?

问题描述 php的类里可以有两个构造函数? class ecs_error { var $_message = array(); var $_template = ''; var $error_no = 0; /** * 构造函数 * * @access public * @param string $tpl * @return void */ function __construct($tpl) { $this->ecs_error($tpl); } /** * 构造函数 * * @acces

算法-STC51单片机密码锁程序 为什么我的按键值存不进数组???main函数里的case后面得不出结果;

问题描述 STC51单片机密码锁程序 为什么我的按键值存不进数组???main函数里的case后面得不出结果: #include #include #define uchar unsigned char #define uint unsigned int sbit light=P2^5; uchar originalword[6]={1,2,3,4,5,6}; uchar currentword[6]; uchar newword[6]; bit pwflag; uchar count=0; b

Python两个内置函数 locals 和globals(学习笔记)_python

Python两个内置函数--locals 和globals 这两个函数主要提供,基于字典的访问局部和全局变量的方式. 在理解这两个函数时,首先来理解一下python中的名字空间概念.Python使用叫做名字空间的东西来记录变量的轨迹.名字空间只是一个字典,它的键字就是变量名,字典的值就是那些变量的值.实际上,名字空间可以象Python的字典一样进行访问 每个函数都有着自已的名字空间,叫做局部名字空间,它记录了函数的变量,包括函数的参数和局部定义的变量.每个模块拥有它自已的名字空间,叫做全局名字空

DirectX:函数可以连接任意两个filter

函数可以连接任意两个filter HRESULT ConnectFilters( IBaseFilter *pSrc, IBaseFilter *pDest ) { IPin *pIn = 0; IPin *pOut = 0; IEnumPins *pOutEnum; IEnumPins *pInEnum; PIN_DIRECTION ThisPinDir; HRESULT hr = pSrc->EnumPins( &pOutEnum ); hr = pDest->EnumPins(

用VB在word文件里插入横跨两个section的表格

问题描述 用VB在word文件里插入横跨两个section的表格 我的word文件有两个section,第一页是section1,后面的都是section2.分成两个section是因为我header部分的高度不同. 现在我想用vb插入一个3行7列的表格,其中第三行的单元格合并成一个,里面有大量文字,一页不够会到第二页.现在我直接用vb插入的时候表格会横跨第一第二页,都是section1,然后第三页是section2. 我想让超出第一页的部分直接在section2继续,应该怎样用vb完成? 谢谢

asp下用datediff实现计算两个时间差的函数_应用技巧

计算两个时间差的函数 '****************************** '||Function TimeDiff(sBegin, sEnd) '||本函数计算两个时间的差,可以不用更改直接使用 '||作者:machinecat 2001/10/26 '****************************** '****************************** '注:首先需要判断用户输入的sBegin与sEnd之间的大小 '可以通过DataDiff函数获得两者之间的时

函数指针 c语言 指针-C语言 在函数里给结构体赋值

问题描述 C语言 在函数里给结构体赋值 求懂的人解释一下,谢谢 代码意思是想在传结构体指针给函数,在函数里面改变结构体各项的值,运行结果为:a和b的值能改变,但到打印指针c的时候,程序报错 #include struct stu { int a; int b; char *c; }; //给结构体s1初始化 void Fun(void *ptr) { char *s = (char *)malloc(10); s = "Hello World"; int *p = (int *)ptr

关于char a,b,c,%d,%c%d分两次用scanf函数输入,却清零了第一次的数值问题

问题描述 关于char a,b,c,%d,%c%d分两次用scanf函数输入,却清零了第一次的数值问题 #include #include main() { unsigned char a,b,c; scanf("%d",&a); printf("%dn",a); getchar(); printf("%dn",a); scanf("%c %d",&b,&c); printf("%d,%c,%