请教如何申明枚举类型为全局变量

[复制链接]
 楼主| chshfeng84 发表于 2010-12-15 09:52 | 显示全部楼层 |阅读模式
2个.c文件都需要用到该枚举变量,所以希望在头文件中申明该枚举变量。比如申明一个枚举变量 enum {a,b,c,}cc。我在头文件中申明 extern enum {a,b,c,}cc; 然后在一个.c文件中初始化cc=a; 但是这样keil编译时会出现cc 重定义这样的警告。不知道大家是如何申明枚举变量为全局变量的??谢谢大家
HWM 发表于 2010-12-15 10:39 | 显示全部楼层
re LZ:

变量别放在头文件里。由于头文件可能被多模快引用,就可能出现重复定义。

作为全局变量,在一个模快中定义一次,而在其他模快中用“extern”说明之。

按LZ情形,应该出现的是“未定义”的错误,因为“extern”不提供实质意义上的变量物理空间的分配。

解决的方法是:

头文件中放置

enum abc {a,b,c};

C文件中放置

enum abc cc; // 在某一主模块中

extern enum abc cc; // 在其他模块中

这样,就可以对cc进行操作了,如:

cc = c;
 楼主| chshfeng84 发表于 2010-12-15 11:52 | 显示全部楼层
谢谢HWM老师。照着您的方法,问题解决了。
nongfuxu 发表于 2010-12-15 13:39 | 显示全部楼层
学习了.
catzl7 发表于 2010-12-16 13:33 | 显示全部楼层
:victory:
myworkmail 发表于 2010-12-17 17:26 | 显示全部楼层
xlsbz 发表于 2010-12-18 11:24 | 显示全部楼层
请教一下 如何对枚举变量的类型进行强制类型转换
pentral0311 发表于 2010-12-21 09:26 | 显示全部楼层
这个应该比较简单 如TpyeData temp

temp =( TpyeData)a;
TpyeData 为你所需的数据类型
dmtz 发表于 2010-12-22 12:47 | 显示全部楼层
good good study
day day up
e掾木 发表于 2010-12-22 18:33 | 显示全部楼层
本帖最后由 e掾木 于 2010-12-22 18:38 编辑

typedef enum{
     boy,
     girl,
     man,
     woman,
     oldman,
}family;

#ifdef __GLOBAL__
#define  _EXT_
#else
#define   _EXT_ extern
#endif

_EXT_   family  Yours;
......

评分

参与人数 1威望 +1 收起 理由
vigorshaka + 1 good answer

查看全部评分

kongformat 发表于 2010-12-26 17:40 | 显示全部楼层
学习中
vigorshaka 发表于 2010-12-26 19:11 | 显示全部楼层
10楼的是正解,用typedef才是王道。
lelee007 发表于 2010-12-26 23:50 | 显示全部楼层
总是有些人有这个坏毛病,在头文件中声明变量,不知道都跟哪儿学的,俺遇见过好几个了
LZL_83 发表于 2011-1-4 12:41 | 显示全部楼层
学习
bukusishen 发表于 2011-1-6 22:48 | 显示全部楼层
这里的氛围我很喜欢!
qink2008 发表于 2011-1-7 10:02 | 显示全部楼层
c文件定义,h文件说明,使用加extern
qqjj2536 发表于 2011-1-7 10:11 | 显示全部楼层
10楼的很规范很标准
new1988 发表于 2011-1-8 16:56 | 显示全部楼层
总是有些人有这个坏毛病,在头文件中声明变量,不知道都跟哪儿学的,俺遇见过好几个了
lelee007 发表于 2010-12-26 23:50

为什么不能在头文件里面声明变量啊。
我一直都是在C文件中定义变量,然后在相应头文件中把变量做extern的声明啊!就像函数一样。函数的实体在C文件中,然后在头文件中把函数做extern的声明。这样难道错了吗?
e掾木 发表于 2011-1-9 08:59 | 显示全部楼层
使用全局变量是为不得已,到目前为止还没发现哪一个RTOS设计无全局变量。既然你在A文件里定义了变量,B文件里使用extern,还不如干脆头文件里一次搞定来得痛快。
zf275140191 发表于 2011-1-17 23:18 | 显示全部楼层
同意18楼,我也是这么做的,我看过新华龙给的例程,全都是这样写的,不知道13楼的大师的格式是啥样的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

91

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部