C2373的问题

sy_sjy 2012-06-12 01:20:41
请教各位高手啊,这个问题该如何解决?急等,谢谢了。

报错现象:

...projects\XXX\app\app\prototype\pos_variables.c(38) : error C2373: 'X1' : redefinition; different type modifiers
...projects\XXX\app\app\prototype\pos.h(434) : see declaration of 'X1'



IDE:VS2005
编译设置:已经调整为编译C语言,多字节编译设置

示例:
file :pos.h

#ifndef POS_H /* Prevent multiple inclusions of this .h file*/
#define POS_H

#ifdef POS_MODULE

extern const int X1;
extern const int X2;
extern const int X3;

#else

extern const int X1;

#endif
#endif

file:pos_variables.c

#include "pos.h"
int X1;
int X2;
int X3;

备注信息:在K51编译器里能通过编译,没有报错
...全文
278 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sy_sjy 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

VS默认认为 const类型和非const类型是不同类型。所以你使用了extern const int X3;和int X3;。那么编译器认为你是冲定义了。你的意图是什么?如果你想定义extern 变量的话,就不要包含头文件,而且类型保持一致
[/Quote]
您好,非常感谢您的回复啊。我的目的很简单,就是做公用和非公用的接口。
示例中X1就是公用接口,X2,X3就是私有接口。

现在情况是这样的,我在头文件里有定义了非系统定义的类型,比方说
typedef Y int;
typedef Z unsigned char;
现在把X2定义为
Y X2;
Z X3;
这样,如果不包含头文件的的话,这个类型就无法识别了。所以会出现另外的问题,光去掉头文件包含这个不能解决根本问题。
还有最后我写了一句,我说,在K51的编译器里能通过编译的,为什么在VS2005里却不能通过啊?

还有再解释一下为什么要这么样复杂的去操作,就是变量单独用一个文件定义开来,这是和安全开发有关系的,某种安全开发体系里就有这么些要求,必须要这样分开来,呵呵,不要骂我没事找事啊。
W170532934 2012-06-12
  • 打赏
  • 举报
回复
VS默认认为 const类型和非const类型是不同类型。所以你使用了extern const int X3;和int X3;。那么编译器认为你是冲定义了。你的意图是什么?如果你想定义extern 变量的话,就不要包含头文件,而且类型保持一致

70,035

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧