读书人

取函数的地址取到的是异常的值函数地

发布时间: 2012-08-11 20:50:31 作者: rapoo

取函数的地址取到的是错误的值,函数地址赋值后发生改变??????

C/C++ code
    typedef void* (*ptr)(int, int, unsigned int, int);    ptr p = (myfunction);


调试时发现,p的值与myfunction的地址是不同的,为什么会有这种情况发生?

上面的代码是.cpp文件中的,而myfunction是.c中的函数。

不是所有函数都有这种情况,部分如此。

[解决办法]
我猜可能是C和C++代码一起使用出现的问题
[解决办法]
大概是因为C与CPP的语义表还有符号表的不同造成的问题吧!就像同一个函数…在C中可能存为:_fun
在CPP中可能就为:void_fun_int_int之类的…符号表是改变了的!所以CPP支持重载而C不支持…貌似楼主出现该问题的原因是标准头文件的extern "C"的原因吧…
在标准头文件中应该都有个定义
#ifndef __INCvxWorksh
#define __INCvxWorksh
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
具体什么用我忘记了!貌似在一本书上看到过…知道的就那么多了!望有人来探讨一下…相互增进…
(我是新手…可能有错…说错勿喷…)

读书人网 >C语言

热点推荐