关于函数的默认返回值

elasma 2006-12-26 06:36:00
bool A::f()
{
....
while( ... )
{
....
if( ... )
return false; //###
....
}
}

bool A::ff()
{
....
if( ! f() )
return false;
return true;
}

A::f()中只有一个return(###处),函数结尾忘了写return true。在程序状态不变的情况下,反复执行A::ff(),发现偶尔(大约10次中有一次)对f()的调用会返回false。
但是在###处加断点,从没停下,说明f()一定是在while结束后返回的。我另写了一个简单的类似f()的测试程序,结果函数一定会返回true。
对f()的调用为什么有时会返回false呢?
函数结尾处加上return true以后,运行二、三十次都正常,但是不知道会不会偶尔还返回false。
...全文
867 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
VCLIFE 2006-12-27
  • 打赏
  • 举报
回复
VC里main不返回值也有warning,但是在GCC上就没有
elasma 2006-12-27
  • 打赏
  • 举报
回复
那就是说A::f()的结尾不写return true也不写return false,它返回的结果不确定?我一直以为它会返回一个默认值呢
haidaodiege 2006-12-27
  • 打赏
  • 举报
回复
这个就像局部变量【int i;】一样,i的值编译器不默认初始化,他是上次内存驻留值,是不确定的
taodm 2006-12-27
  • 打赏
  • 举报
回复
你用的编译器比较差,并且你从来不看编译的warning的。
C++规定是(除了main函数)不可以有默认返回值。C则没有强制这一点,如果没有return则返回eax寄存器里的东西。
AI风 2006-12-26
  • 打赏
  • 举报
回复
刚才简单看了一下f()的汇编代码,发现f()在代码结束的时候,没有去改变eax的值(在汇编周中eax值表示函数的返回值)。因为在操作中还要使用到eax值的,这样函数就将中间状态的eax值当作函数值返回了,所以导致不确定。

如果你加上return true,在f()返回的时候,它会将1赋值给eax,所以返回就肯定是真了,不会出现false的情况了

64,640

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧