函数指针错误C2373:重新定义;不同类型的修饰符

时间:2010-09-21 09:08:04

标签: c visual-studio-2008 function-pointers

我正在尝试编译一些函数指针赋值代码 我尝试了不同的指针赋值变体和__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)时,我的代码中没有出现问题,但在其他地方代码将无法编译。

1 个答案:

答案 0 :(得分:0)

不要将代码放在头文件中

头:

int (*_get_TYPE_MODE)(void);
/* without the initialization (initialization is code)
int (*_get_TYPE_MODE)(void) = NULL; */