| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1254 人关注过本帖
标题:大家帮忙看看,说说why会这样(结帖)
取消只看楼主 加入收藏
c_acceleration
Rank: 1
等 级:新手上路
帖 子:101
专家分:0
注 册:2008-4-28
收藏
 问题点数:0 回复次数:6 
大家帮忙看看,说说why会这样(结帖)
我们知道,如果一个函数的specification中指定了返回值类型,那么在函数体中要给定一个返回值。我的问题是:如果由于某些原因,程序的逻辑恰好没有在函数体中指定返回值,此时函数的调用者将得到什么?是否有一定的规律可循?

我感到困惑的是,在Solaris10平台上,我得到了两种完全相反的结果:
/home/cris/tmp$ cat testcase.cpp
#include <stdio.h>
#include <stdlib.h>
bool myfunc(int p)
{
        if (p == 1) {
                return false;
        } else if (p == 2) {
                return false;
        }
}
int main()
{
        try
        {
                if (myfunc(3)) {
                        printf(" ... return TRUE ...\n");
                } else {
                        printf(" ... return FALSE ...\n");
                }
        } catch (...) {
                printf(" ... Exception is caught ...\n");
        }
        return 0;
}
/home/cris/tmp$ rm -rf a.out
/home/cris/tmp$ /opt/spro12/SUNWspro/bin/CC -g ./testcase.cpp
/home/cris/tmp$ ./a.out
... return FALSE ...
/home/cris/tmp$
/home/cris/tmp$ rm -rf a.out
/home/cris/tmp$ /opt/spro12/SUNWspro/bin/CC  ./testcase.cpp  
/home/cris/tmp$ ./a.out
... return TRUE ...

[[it] 本帖最后由 c_acceleration 于 2008-5-4 14:12 编辑 [/it]]
搜索更多相关主题的帖子: why 
2008-05-04 12:14
c_acceleration
Rank: 1
等 级:新手上路
帖 子:101
专家分:0
注 册:2008-4-28
收藏
得分:0 
没人顶啊。。。

天道酬勤
2008-05-04 13:21
c_acceleration
Rank: 1
等 级:新手上路
帖 子:101
专家分:0
注 册:2008-4-28
收藏
得分:0 
为上面结果不一样?上面的。。。

天道酬勤
2008-05-04 13:35
c_acceleration
Rank: 1
等 级:新手上路
帖 子:101
专家分:0
注 册:2008-4-28
收藏
得分:0 
[bo]以下是引用 [un]PcrazyC[/un] 在 2008-5-4 13:35 的发言:[/bo]

他写的代码跟捕捉一点关系都没有,又是一个与编译器的实现有关的东西


差不多是的,why?

[[it] 本帖最后由 c_acceleration 于 2008-5-4 13:44 编辑 [/it]]

天道酬勤
2008-05-04 13:41
c_acceleration
Rank: 1
等 级:新手上路
帖 子:101
专家分:0
注 册:2008-4-28
收藏
得分:0 
if (p == 1) {
                return false;
        } else if (p == 2) {
                return false;
        }

我不是想要结果,在运行两次同样的程序得到的结果不一样

天道酬勤
2008-05-04 13:48
c_acceleration
Rank: 1
等 级:新手上路
帖 子:101
专家分:0
注 册:2008-4-28
收藏
得分:0 
看了,感觉标准的就是不错,xor %eax,%eax
至少把%eax 清零,寄存器没残留。。。

天道酬勤
2008-05-04 13:59
c_acceleration
Rank: 1
等 级:新手上路
帖 子:101
专家分:0
注 册:2008-4-28
收藏
得分:0 
[bo]以下是引用 [un]sunkaidong[/un] 在 2008-5-4 14:04 的发言:[/bo]

汇编到几代了?我怎么觉得我的c51和x86(除去忘记的),怎么还有没见过的指令...



这个汇编可以说是祖宗的变种

#include <stdlib.h>
bool myfunc(int p)
{
        if (p == 1) {
                return false;
        } else if (p == 2) {
                return false;
        }
      //  return  false;// 我加与不加
}

int main()
{
        try
        {
                if (myfunc(3)) {
                        printf(" ... return TRUE ...\n");
                } else {
                        printf(" ... return FALSE ...\n");
                }
        } catch (...) {
                printf(" ... Exception is caught ...\n");
        }
        return 0;
}

1
 ... return TURE ...


2
 ... return FALSE ...


之后不用输入都是
 ... return FALSE ...

哈哈,到此结帖吧,此程序病态

[[it] 本帖最后由 c_acceleration 于 2008-5-4 14:15 编辑 [/it]]

天道酬勤
2008-05-04 14:11
快速回复:大家帮忙看看,说说why会这样(结帖)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025459 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved