请问一个有关问题,熟悉Delphi和VC++的一个小疑点.结贴率100%.
请教一个问题,熟悉Delphi和VC++的一个小问题....结贴率100%...........................................
Delphi的函数,在Result后还是会继续往下执行,
而C++的return后函数就跳出了,等于是Delphi的Exit;
例如Delphi如下
Function ABCD:Integer;
begin
Result := 0; //Delphi执行到这里后,还会继续往下执行的
xxx
xxx
xxx
if xxx>bbb then
begin
Result := 1;
Exit;
end;
end;
例如C++如下
int ABCD()
{
return 0; //C++执行到这里后,就不继续往下执行了,直接Exit了...
xxx
xxx
xxx
if (xxx!=qqq)
{
return 1;
}
}
看明白了吗?因为学习写驱动,所以得用下C++,但是觉得C++的函数好奇怪,
难道不能像Delphi那样预先设置返回值吗(Result)?
我知道可以在函数尾部加返回值,但是我喜欢在函数入口加返回值,
因为函数中间有时候直接EXIT了.
------解决方案--------------------
你换个思路想想 c不是一样可以这样做吗, 你在里面定义个r变量, 无论如何都使用return r 的方式返回, 那么程序开始的时候你就可以设定r值, 中间也可以随便改r的值, 但是任何调用return的地方都可以直接使用r来返回
------解决方案--------------------
传送门开的不错啊。原来Delphi这可以这样啊,我也刚知道。
C++可以这样
int ABCD()
{
if(xxx!=qqq)
{
return 0; //硬要一开始就返回,可以做判断。
}
xxx
xxx
xxx
if (xxx!=qqq)
{
return 1;
}
return 2;
}
------解决方案--------------------
楼主喜欢开始就加返回值的话
int ABCD()
{
int ret = 0;
if(xxx!=qqq)
{
ret = xxx;
return ret; //硬要一开始就返回,可以做判断。
}
xxx
xxx
xxx
if (xxx!=qqq)
{
ret = yyy;
return ret;
}
return ret;
}
这样楼主就开心了吧
------解决方案--------------------
int ABCD()
{
int ret = 0;
if(xxx!=qqq)
{
ret = xxx;
return ret; //硬要一开始就返回,可以做判断。
}
xxx
xxx
xxx
if (xxx!=qqq)
{
ret = yyy;
return ret;
}
return ret;
}
黑色部分就定死,以后楼主就直接用这个模板,以后就用修改红色的那部分
------解决方案--------------------
result只相当于准备好返回值了,实际返回还是需要exit或函数代码末尾
result这个关键词其实挺不错
vb、asp,只能以函数名作为准备好的返回值,如果函数改名了,要替换代码里的函数名!
pascal也支持以函数名作为准备好的返回值,但是这样容易有歧义:
funname=funname+1; //第二个funname是 准备好的返回值 还是 递归调用(如果无参数)?
Delphi的函数,在Result后还是会继续往下执行,
而C++的return后函数就跳出了,等于是Delphi的Exit;
例如Delphi如下
Function ABCD:Integer;
begin
Result := 0; //Delphi执行到这里后,还会继续往下执行的
xxx
xxx
xxx
if xxx>bbb then
begin
Result := 1;
Exit;
end;
end;
例如C++如下
int ABCD()
{
return 0; //C++执行到这里后,就不继续往下执行了,直接Exit了...
xxx
xxx
xxx
if (xxx!=qqq)
{
return 1;
}
}
看明白了吗?因为学习写驱动,所以得用下C++,但是觉得C++的函数好奇怪,
难道不能像Delphi那样预先设置返回值吗(Result)?
我知道可以在函数尾部加返回值,但是我喜欢在函数入口加返回值,
因为函数中间有时候直接EXIT了.
------解决方案--------------------
你换个思路想想 c不是一样可以这样做吗, 你在里面定义个r变量, 无论如何都使用return r 的方式返回, 那么程序开始的时候你就可以设定r值, 中间也可以随便改r的值, 但是任何调用return的地方都可以直接使用r来返回
------解决方案--------------------
传送门开的不错啊。原来Delphi这可以这样啊,我也刚知道。
C++可以这样
int ABCD()
{
if(xxx!=qqq)
{
return 0; //硬要一开始就返回,可以做判断。
}
xxx
xxx
xxx
if (xxx!=qqq)
{
return 1;
}
return 2;
}
------解决方案--------------------
楼主喜欢开始就加返回值的话
int ABCD()
{
int ret = 0;
if(xxx!=qqq)
{
ret = xxx;
return ret; //硬要一开始就返回,可以做判断。
}
xxx
xxx
xxx
if (xxx!=qqq)
{
ret = yyy;
return ret;
}
return ret;
}
这样楼主就开心了吧
------解决方案--------------------
int ABCD()
{
int ret = 0;
if(xxx!=qqq)
{
ret = xxx;
return ret; //硬要一开始就返回,可以做判断。
}
xxx
xxx
xxx
if (xxx!=qqq)
{
ret = yyy;
return ret;
}
return ret;
}
黑色部分就定死,以后楼主就直接用这个模板,以后就用修改红色的那部分
------解决方案--------------------
result只相当于准备好返回值了,实际返回还是需要exit或函数代码末尾
result这个关键词其实挺不错
vb、asp,只能以函数名作为准备好的返回值,如果函数改名了,要替换代码里的函数名!
pascal也支持以函数名作为准备好的返回值,但是这样容易有歧义:
funname=funname+1; //第二个funname是 准备好的返回值 还是 递归调用(如果无参数)?