| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付赛孚耐:软件保护加密专家
身份认证令牌USB KEY   
共有 655 人关注过本帖
标题:大家帮忙看看,说说why会这样(结帖)
收藏  订阅  推荐  打印 
c_acceleration
Rank: 2
等级:注册会员
帖子:101
积分:1242
注册:2008-4-28
大家帮忙看看,说说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 ...

[ 本帖最后由 c_acceleration 于 2008-5-4 14:12 编辑 ]
搜索更多相关主题的帖子: why  
2008-5-4 12:14
c_acceleration
Rank: 2
等级:注册会员
帖子:101
积分:1242
注册:2008-4-28

没人顶啊。。。

天道酬勤
2008-5-4 13:21
sunkaidong
Rank: 12Rank: 12Rank: 12
来自:南京师范大学
等级:版主
威望:7
帖子:4219
积分:45952
注册:2006-12-28
你提到了捕获异常,我就写点

#include<iostream>
using namespace std;
class erro
{   string s;
public:
    erro(string s1)
        {
            s=s1;
        }
    void show()
    {
        cout<<s.c_str()<<endl;
    }
    };
class demo
{   
    int j;    
public:
    demo(int i)
    {
       if((j=i)>=3)
           throw erro("您选择参数错误");
    }
};
int main()
{
    try
    {
        demo d(3);
    }
    catch(erro &d)
    {
        d.show();
    };
    return 0;
}

学习需要安静。。海盗要重新来过。。
2008-5-4 13:25
sunkaidong
Rank: 12Rank: 12Rank: 12
来自:南京师范大学
等级:版主
威望:7
帖子:4219
积分:45952
注册:2006-12-28

#include<iostream>
using namespace std;
class erro
{   string s;
public:
    erro(string s1)
        {
            s=s1;
        }
    void show()
    {
        cout<<s.c_str()<<endl;
    }
    };
bool myfunc(int p)
{
    switch(p)
    {
    case 1:
         return true;
    case 2:
         return false;
    default:
         throw erro("参数选择错误!");
    };
}
int main()
{    int i;
     cin>>i;
        try
        {
                if (myfunc(i)) {
                        printf(" ... return TRUE ...\n");
                } else {
                        printf(" ... return FALSE ...\n");
                }
        } catch (erro &e) {
                e.show();
        }
        return 0;
}

学习需要安静。。海盗要重新来过。。
2008-5-4 13:34
c_acceleration
Rank: 2
等级:注册会员
帖子:101
积分:1242
注册:2008-4-28

为上面结果不一样?上面的。。。

天道酬勤
2008-5-4 13:35
PcrazyC
Rank: 12Rank: 12Rank: 12
等级:版主
威望:28
帖子:5631
积分:57645
注册:2006-10-20

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

雁无留踪之意,水无取影之心
2008-5-4 13:35
c_acceleration
Rank: 2
等级:注册会员
帖子:101
积分:1242
注册:2008-4-28

以下是引用 PcrazyC 在 2008-5-4 13:35 的发言:

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

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

天道酬勤
2008-5-4 13:41
sunkaidong
Rank: 12Rank: 12Rank: 12
来自:南京师范大学
等级:版主
威望:7
帖子:4219
积分:45952
注册:2006-12-28

以下是引用 c_acceleration 在 2008-5-4 13:35 的发言:

为上面结果不一样?上面的。。。
不太习惯你的平台...我一般很少用..你运行下我的结果呢?g++或gcc

学习需要安静。。海盗要重新来过。。
2008-5-4 13:45
Knocker
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:36
帖子:9963
积分:324662
注册:2004-6-1

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2008-5-4 13:47
c_acceleration
Rank: 2
等级:注册会员
帖子:101
积分:1242
注册:2008-4-28

if (p == 1) {
                return false;
        } else if (p == 2) {
                return false;
        }

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

天道酬勤
2008-5-4 13:48
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.057433 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved