打印

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

[复制链接]
16014|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chshfeng84|  楼主 | 2010-12-15 09:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
2个.c文件都需要用到该枚举变量,所以希望在头文件中申明该枚举变量。比如申明一个枚举变量 enum {a,b,c,}cc。我在头文件中申明 extern enum {a,b,c,}cc; 然后在一个.c文件中初始化cc=a; 但是这样keil编译时会出现cc 重定义这样的警告。不知道大家是如何申明枚举变量为全局变量的??谢谢大家

相关帖子

来自 2楼
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 | 只看该作者
学习了.

使用特权

评论回复
5
catzl7| | 2010-12-16 13:33 | 只看该作者
:victory:

使用特权

评论回复
6
myworkmail| | 2010-12-17 17:26 | 只看该作者
mark

使用特权

评论回复
7
xlsbz| | 2010-12-18 11:24 | 只看该作者
请教一下 如何对枚举变量的类型进行强制类型转换

使用特权

评论回复
8
pentral0311| | 2010-12-21 09:26 | 只看该作者
这个应该比较简单 如TpyeData temp

temp =( TpyeData)a;
TpyeData 为你所需的数据类型

使用特权

评论回复
9
dmtz| | 2010-12-22 12:47 | 只看该作者
good good study
day day up

使用特权

评论回复
10
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
11
kongformat| | 2010-12-26 17:40 | 只看该作者
学习中

使用特权

评论回复
12
vigorshaka| | 2010-12-26 19:11 | 只看该作者
10楼的是正解,用typedef才是王道。

使用特权

评论回复
13
lelee007| | 2010-12-26 23:50 | 只看该作者
总是有些人有这个坏毛病,在头文件中声明变量,不知道都跟哪儿学的,俺遇见过好几个了

使用特权

评论回复
14
LZL_83| | 2011-1-4 12:41 | 只看该作者
学习

使用特权

评论回复
15
bukusishen| | 2011-1-6 22:48 | 只看该作者
这里的氛围我很喜欢!

使用特权

评论回复
16
qink2008| | 2011-1-7 10:02 | 只看该作者
c文件定义,h文件说明,使用加extern

使用特权

评论回复
17
qqjj2536| | 2011-1-7 10:11 | 只看该作者
10楼的很规范很标准

使用特权

评论回复
18
new1988| | 2011-1-8 16:56 | 只看该作者
总是有些人有这个坏毛病,在头文件中声明变量,不知道都跟哪儿学的,俺遇见过好几个了
lelee007 发表于 2010-12-26 23:50

为什么不能在头文件里面声明变量啊。
我一直都是在C文件中定义变量,然后在相应头文件中把变量做extern的声明啊!就像函数一样。函数的实体在C文件中,然后在头文件中把函数做extern的声明。这样难道错了吗?

使用特权

评论回复
19
e掾木| | 2011-1-9 08:59 | 只看该作者
使用全局变量是为不得已,到目前为止还没发现哪一个RTOS设计无全局变量。既然你在A文件里定义了变量,B文件里使用extern,还不如干脆头文件里一次搞定来得痛快。

使用特权

评论回复
20
zf275140191| | 2011-1-17 23:18 | 只看该作者
同意18楼,我也是这么做的,我看过新华龙给的例程,全都是这样写的,不知道13楼的大师的格式是啥样的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

91

帖子

1

粉丝