大家帮忙看看,说说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
----------------解决方案--------------------------------------------------------
没人顶啊。。。
----------------解决方案--------------------------------------------------------
你提到了捕获异常,我就写点
#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;
}
----------------解决方案--------------------------------------------------------
#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;
}
----------------解决方案--------------------------------------------------------
为上面结果不一样?上面的。。。
----------------解决方案--------------------------------------------------------
他写的代码跟捕捉一点关系都没有,又是一个与编译器的实现有关的东西
----------------解决方案--------------------------------------------------------
[bo]以下是引用 [un]PcrazyC[/un] 在 2008-5-4 13:35 的发言:[/bo]
他写的代码跟捕捉一点关系都没有,又是一个与编译器的实现有关的东西
他写的代码跟捕捉一点关系都没有,又是一个与编译器的实现有关的东西
差不多是的,why?
[[it] 本帖最后由 c_acceleration 于 2008-5-4 13:44 编辑 [/it]]
----------------解决方案--------------------------------------------------------
[bo]以下是引用 [un]c_acceleration[/un] 在 2008-5-4 13:35 的发言:[/bo]
为上面结果不一样?上面的。。。
为上面结果不一样?上面的。。。
不太习惯你的平台...我一般很少用..你运行下我的结果呢?g++或gcc
----------------解决方案--------------------------------------------------------
http://bbs.bccn.net/thread-212001-2-1
----------------解决方案--------------------------------------------------------
if (p == 1) {
return false;
} else if (p == 2) {
return false;
}
我不是想要结果,在运行两次同样的程序得到的结果不一样
----------------解决方案--------------------------------------------------------