一个难题,怎么让一个VOID 类型的函数return一个返回值
一个难题,请教高手!如何让一个VOID 类型的函数return一个返回值?一个难题,请教高手!如何让一个VOID 类型的
一个难题,请教高手!如何让一个VOID 类型的函数return一个返回值?
一个难题,请教高手!如何让一个VOID 类型的函数return一个返回值?
因为历史原因,这个函数被人写成void类型了,但是,我现在远程调用这个函数,需要返回一个非常又有用的值,我该怎么做?
void pub();
server->pub();
我需要在pub中写一个:
pub()
{int i;
return i;
}
程序变成这样:
int j=server->pub();
大概是这个过程,我简化了过程,实际过程非常复杂。
不知道该怎么办。。。。。请高手路过指教一下!
非常感谢!
[解决办法]
返回值改为int型?
int pub()?
[解决办法]
改源码呗
[解决办法]
如果不能修改函数原型,并且也没有指针型的参数,那就用全局变量吧。
[解决办法]
返回值一般 只能靠 指针(参数返回或返回值返回),引用(参数返回,或返回值返回), 函数返回值 ,或者是全局变量
[解决办法]
不要试图在错误问题上寻找正确解
[解决办法]
这限制,那限制,效率有限制不?我让它在硬盘上写个文件,返回之后我就去看那文件长啥模样行不?
[解决办法]
[解决办法]貌似无解。
[解决办法] 我们知道,x86上的C语言规范,总是将返回值放入eax.
所以,尽管你定义了函数的返回类型为void,你依然可以通过嵌入式汇编将需要的结果返回到eax寄存器。
如果你定义了函数的类型为void型,那么如果你调用这个函数的语句写成 x=pub(...),编译器一定会报错,拒绝编译,唯一的办法就是使用函数的指针,将函数pub经过强制类型转化赋值给一个函数指针,然后调用这个函数指针。
下面的代码在VC中编译和运行通过。
C/C++ code#include<stdio.h>typedef int (*FUN_PTR) ( int a, int b);void pub(int x,int y){ int r=x+y; _asm { mov eax,r }}int main(){ int x,y,z; FUN_PTR f; f=(FUN_PTR)(pub); x=3; y=5; z=f(x,y); printf("%d+%d=%d\n",x,y,z); return 0;}
[解决办法]
[解决办法]
很明显这个问题本身就有问题。
[解决办法]
貌似无解了
[解决办法]
既然源码不让改,那你光盯着函数类型有啥用啊?函数里面是怎么处理你需要的那个数据的你知道吗?
先不说能不能返回一个值这种语言标准的问题,就算能改函数类型,既然源码不让改,你怎么让函数返回你需要的那个值?
神奇的想法
先确定逻辑关系,再寻找技术解答吧
[解决办法]
估计是没有源码了吧,不行就自己实现个pubex,内部调用pub,如果是需要内部逻辑,只能来回jmp了
[解决办法]
显然是不可能的事情。。。。
必然要改源码
[解决办法]
楼主就像讲了一个笑话,太冷了。
[解决办法]
可以重载吧。。。
[解决办法]
楼主!!
这么做是自寻死路!!
不是后期郁闷死!!
就是被维护你代码的人鄙视死!!
------------------------
http://topic.csdn.net/u/20120507/12/5ac3a8af-5b2c-473d-9865-bbd5b48e6506.html?33091
[解决办法]
C/C++ codevoid pub(){ int i = 10; printf("%d",i);}void tmppub(){ pub();}namespace pubs{ int pub() { printf("dada\n"); tmppub(); return 0; }};int main(int c,char** v){ pubs::pub(); return 0;}
[解决办法]
这本来就是个错误
源码你是必须得改的
为了不影响别人使用void你是一定不能改的
只能在里面加好注释和条件跳到另外一个函数处理一些事务
条件要限制严格方能不对别的地方造成影响
[解决办法]
很好,很强大,学习了。
[解决办法]
12 楼,是解决问题的,
比用 全局变量,好很多。
函数 void fff(); 它的函数签名,不能改变。 (有很多客观因素,比如,有很多其它部分的代码,都调用 这个 void fff() ; )
现在,某些情况下,需要它的返回值,可又不能改变 函数签名,不能把void改成 int。
毫无疑问,12 楼,是解决问题的。