我正在尝试编译一些函数指针赋值代码 我尝试了不同的指针赋值变体和__cdecl 但是没有成功,过了一段时间我放弃了......也许你会看到我不能做的事情。
我用visual express 2008编译,带有标志:
/ Gd __cdecl调用约定
/ O2最大化速度
/ TC将所有文件编译为.c
标题:
#ifdef __cplusplus
extern "C" {
#endif
int __cdecl _intFunc(void); // tried without __cdelc as well
int (*_get_TYPE_MODE)(void) = NULL;
...
...
#ifdef __cplusplus
}
#endif
的src:
int __cdecl _intFunc(void){return 0;}; // tried without __cdelc as well
_get_TYPE_MODE = _intFunc; // tried &_intFunc as well.
这会产生以下错误:
src \ s.c(61):错误C2373:'_ get_TYPE_MODE':重新定义;不同类型的修饰符
src \ h.h(94):查看'_get_TYPE_MODE'的声明 src \ s.c(61):警告C4047:'initializing':'int'在间接级别上与'int(__ cdecl *)(void)'
不同
修改
当我将编译器选项从/ Gd更改为/ Gz(函数为__stdcall)时,我的代码中没有出现问题,但在其他地方代码将无法编译。
答案 0 :(得分:0)
不要将代码放在头文件中
头:
int (*_get_TYPE_MODE)(void);
/* without the initialization (initialization is code)
int (*_get_TYPE_MODE)(void) = NULL; */