| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 902 人关注过本帖
标题:枚举类型
只看楼主 加入收藏
duzhiming
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2012-2-13
结帖率:62.07%
收藏
已结贴  问题点数:20 回复次数:10 
枚举类型
我在用STM32 但是里面有很多底层的函数 不是非常理解
其中枚举类型来定义变量 不解中
如果只用普通的枚举类型

enum {a=1,b,c,d};
...printf(...,a);那么这个比较容易理解输出就是1了
但是怎样用
typedef enum InitSturcture{a=1,b,c,d};

int main()
{InitStructure x=(1,23,44,46);不管这里怎样定义 最后输出的x都是最后的46 也就是
//InitStructure x=(1,23,44,0);输出为0
}
怎样用枚举类型定义一个变量 啊  求解  
我想得到 x的值 23 或者44 或者1 thanks
怎样写一个输出格式来得到结果  ?指点一下 朋友们  
我看了一些资料 没看明白 基本都是不带关键字typedef的
而带typedef关键字的 都狠狠狠复杂 啊  
搜索更多相关主题的帖子: 函数 朋友 资料 
2012-02-13 17:48
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
收藏
得分:5 
InitStructure x=(1,23,44,46); 括号里面的东西是不是可以看成是个逗号表达式呢?
也就是说逗号表达式只运算最后一个逗号后面的东西,不管前面的值是怎么运算的,所以说这里的x一直都是==最后一个值;
2012-02-13 18:13
duzhiming
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2012-2-13
收藏
得分:0 
回复 2楼 小赵q1
对哦 我怎么没想到- - 逗号表达式 是这样的
那么正确的 枚举类型应该怎样定义  InitStructure 是枚举类型 x是变量 这个变量里面有4个值 怎么选择
我按照结构体去做了但是不行  
书上说和结构以类似  我用结构体指针 试了试不行

[ 本帖最后由 duzhiming 于 2012-2-13 18:37 编辑 ]
2012-02-13 18:33
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:10 
枚举定义是相当于常量,不用再给值了。

正确的用法应该是这样的:
InitStructure x = a;
或者:
InitStructure x = b;
这样的。

要么就是
程序代码:
switch (x) {
    case a:
    case b:
    ...
}

你可以把 a, b, c 之类的想像成宏,
好比在之前有类似
#define a 1
#define b 2
#define c 3
这样的语句。

不过枚举和宏在语义上有区别。可读性和维护性也不一样。编译器也能在编译过程中给出更多有关枚举的警告或提示,所以用用也不错。
2012-02-13 22:53
hnuhsg1226
Rank: 9Rank: 9Rank: 9
来 自:中国
等 级:蜘蛛侠
威 望:2
帖 子:314
专家分:1314
注 册:2011-3-27
收藏
得分:1 
枚举就是一一对应,没什么特别的,在你这种情况,用不用都无所谓

我的地盘
2012-02-13 23:00
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:2 
哦。楼主还问了 typedef。枚举的事就那么回事,很多讲 c 的书提的也不多。

typedef 挺有用的。一般是用来缩写的,比如
struct ABC { .... }
定义好了之后,要想用,得这么声明:
struct ABC abc;
挺麻烦。
如果加一个
typedef struct ABC A;
就可以直接写
A abc;
了。

有的时候,它可以缩写成:
typedef struct ABC {...} A;
甚至
typedef struct {...} A;
如果,struct 本身比较复杂的话,看上去就好像是 typedef 语句很复杂一样,不过其实并不是这样。

用了 typedef 能让代码简洁很多,可读性也可以上来,试看下例:
typedef void (*sighandler_t)(int);
sighandler_t func = ...;
从各种意义上讲,是不是都要比:
void (*func)(int) = ...;
清楚很多呀?
2012-02-13 23:16
duzhiming
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2012-2-13
收藏
得分:0 
回复 6楼 pangding
如果是typedef struct{....}initstructure;如果要让此类型输出{}内的不同值  这个我能做到哇
用指针 或者直接定义都可以 如果struct 有不同的两个变量 initsturcture1  initsturcture2 可以得到很多值哦
typedef struct{char a;char b;....int x;}_program; //可以定义为类型

我不明白 如果是枚举类型的话怎么办
比如
typedef enum
          {a=3,b,c,d} initenum;这是常量

如果是typedef enum char a;char b;....int x;}_program;这样行不行 是不是如 4楼上说的 enum 只能是常量 我看了一些书 好像也都是常量来表示  {}内的语句 似乎类似于 #define 的替换一样
总之一句话就是 enum 能不能表示 类型  像 struct 这样typedef struct{char a;char b;....int x;}_program;


[ 本帖最后由 duzhiming 于 2012-2-14 09:32 编辑 ]
2012-02-14 09:30
duzhiming
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2012-2-13
收藏
得分:0 
回复 4楼 pangding
OK 会了
谢谢提示
typedef enum 在main里面 可以来定义 然后可以结合#define 这样确实明确了

我只能理解到这些表面的  再深层次的 暂时领悟不到了  
正在途中

非常感谢

[ 本帖最后由 duzhiming 于 2012-2-14 11:32 编辑 ]
2012-02-14 10:01
转角有梦在等
Rank: 2
来 自:黑龙江
等 级:论坛游民
帖 子:31
专家分:95
注 册:2012-2-4
收藏
得分:1 
enum  {.......}里的可以比成数组   每句都是个元素

一起努力,,,  QQ:7325231
2012-02-14 10:14
duzhiming
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2012-2-13
收藏
得分:0 
回复 9楼 转角有梦在等
typedef enum {};与enum 用法不一样的哦
2012-02-14 10:48
快速回复:枚举类型
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018451 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved