为啥return 语句 不执行?

[复制链接]
 楼主| nj21ic 发表于 2011-12-27 16:03 | 显示全部楼层 |阅读模式
定义了一个  无返回值 函数
    void a()
      {
           if(A==true)
            return;
      }

无论是跟踪还是正常运行,发现 A即使等于 true 时 ,return 也不执行;
如果 把这个函数 改成有返回值
                int a()
              {
                   if(A==true)
                       return 0;
              }
无论是跟踪还是正常运行,发现 A如果等于 true 时 ,return 0 可以被执行;
  这到底是为啥?
delin17 发表于 2011-12-27 16:14 | 显示全部楼层
直接被优化,无视..
return和直接到下面函数返回,有区别嘛?
 楼主| nj21ic 发表于 2011-12-27 16:26 | 显示全部楼层
有区别的,return 后面 还有些语句,我没有写出来。咋办啊
ayb_ice 发表于 2011-12-27 16:39 | 显示全部楼层
{
}  // 自动返回了
 楼主| nj21ic 发表于 2011-12-27 16:47 | 显示全部楼层
是不是 我的 堆栈 出错了???
 楼主| nj21ic 发表于 2011-12-27 16:48 | 显示全部楼层
不是的 ,它是跳过了 判断语句 ,直接执行 return 后面的 语句了。我没写出来的
wangjun403 发表于 2011-12-27 17:24 | 显示全部楼层
你定义的是个无返回值的函数
NE5532 发表于 2011-12-27 21:35 | 显示全部楼层
呵呵,确实。楼主用的编译器比较聪明的说。
a41197527 发表于 2011-12-28 00:48 | 显示全部楼层
怎么 弄积分啊?
好!不走调 发表于 2011-12-28 13:47 | 显示全部楼层
是不是函数没有返回值,就不执行这条语句??
delin17 发表于 2011-12-30 12:56 | 显示全部楼层
无语,这个问题还没搞明白..他执行return和跳到函数结尾有什么区别呢,都是返回。
所以编译器自动优化了,减少代码量。
有返回值的话,两条语句就不一样了。所以不会跳到最后。
实在不行,你看一下他编译出来的汇编你就明白了。
lxyppc 发表于 2011-12-30 13:24 | 显示全部楼层
本帖最后由 lxyppc 于 2011-12-30 13:25 编辑

被优化了,编译器很"聪明"的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

317

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部

36

主题

317

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部