OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4315|回复: 16

能把宏定义的标识符作为枚举的成员吗?

[复制链接]

106

主题

418

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2016-7-26
在线时间
123 小时
发表于 2016-8-18 11:09:59 | 显示全部楼层 |阅读模式
5金钱
#define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)
#define GPIOB               ((GPIO_TypeDef *) GPIOB_BASE)
#define GPIOC               ((GPIO_TypeDef *) GPIOC_BASE)
#define GPIOD               ((GPIO_TypeDef *) GPIOD_BASE)
#define GPIOE               ((GPIO_TypeDef *) GPIOE_BASE)
#define GPIOF               ((GPIO_TypeDef *) GPIOF_BASE)
#define GPIOG               ((GPIO_TypeDef *) GPIOG_BASE)
以上是stm32f10x.h里的宏定义。
我的问题是:能像下面这样用吗?
typedef enum
{
         GPIOB ,       //PB端口
         GPIOE         //PE端口
} GPIOX;

最佳答案

查看完整内容[请看2#楼]

当然可以。 普通宏定义就是简单的字符替换,随便用。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6291

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11406
金钱
11406
注册时间
2014-4-1
在线时间
1282 小时
发表于 2016-8-18 11:10:00 | 显示全部楼层

当然可以。
普通宏定义就是简单的字符替换,随便用。


回复

使用道具 举报

106

主题

418

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2016-7-26
在线时间
123 小时
 楼主| 发表于 2016-8-18 11:20:48 | 显示全部楼层
xuande 发表于 2016-8-18 11:11
当然可以。
普通宏定义就是简单的字符替换,随便用。

X7V@YLKP8]C~_S5VL_45HOA.png
是这样用吗?
回复

使用道具 举报

106

主题

418

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2016-7-26
在线时间
123 小时
 楼主| 发表于 2016-8-18 11:21:40 | 显示全部楼层
xuande 发表于 2016-8-18 11:11
当然可以。
普通宏定义就是简单的字符替换,随便用。

大神求解。。。
回复

使用道具 举报

58

主题

6291

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11406
金钱
11406
注册时间
2014-4-1
在线时间
1282 小时
发表于 2016-8-18 11:26:16 | 显示全部楼层


这不是宏定义的问题了。

你试着把原始字符串放进来。


回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2016-3-3
在线时间
16 小时
发表于 2016-8-18 11:27:39 | 显示全部楼层
是不可以的,宏定义时一种标志符定义,枚举也是一种标志符定义。
但是枚举只能用来整型常数定义,在不初始化的情况下,枚举默认第一个是0,后面只会顺序加1。
像楼主的定义一般编译器会报错的,可以理解为是重复定义。
希望能解决楼主的疑问。
回复

使用道具 举报

106

主题

418

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2016-7-26
在线时间
123 小时
 楼主| 发表于 2016-8-18 11:29:15 | 显示全部楼层
xuande 发表于 2016-8-18 11:26
这不是宏定义的问题了。

你试着把原始字符串放进来。

是GPIOA_BASE替换GPIOA吗? 大神诉我无知
回复

使用道具 举报

106

主题

418

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2016-7-26
在线时间
123 小时
 楼主| 发表于 2016-8-18 11:33:05 | 显示全部楼层
he282905293 发表于 2016-8-18 11:27
是不可以的,宏定义时一种标志符定义,枚举也是一种标志符定义。
但是枚举只能用来整型常数定义,在不初始 ...

但是我赋初值还是不对
回复

使用道具 举报

58

主题

6291

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11406
金钱
11406
注册时间
2014-4-1
在线时间
1282 小时
发表于 2016-8-18 11:33:51 | 显示全部楼层

typedef enum
{
         ((GPIO_TypeDef *) GPIOB_BASE) ,       //PB端口
          ((GPIO_TypeDef *) GPIOE_BASE)         //PE端口
} GPIOX;

回复

使用道具 举报

106

主题

418

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2016-7-26
在线时间
123 小时
 楼主| 发表于 2016-8-18 11:35:20 | 显示全部楼层
he282905293 发表于 2016-8-18 11:27
是不可以的,宏定义时一种标志符定义,枚举也是一种标志符定义。
但是枚举只能用来整型常数定义,在不初始 ...

难道我就能在不同的头文件里面一个定义枚举一个定义成宏定义,标识符是一样的都不行?
回复

使用道具 举报

106

主题

418

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2016-7-26
在线时间
123 小时
 楼主| 发表于 2016-8-18 11:37:45 | 显示全部楼层
xuande 发表于 2016-8-18 11:33
typedef enum
{
         ((GPIO_TypeDef *) GPIOB_BASE) ,       //PB端口

不对,哦,这个GPIOB_BASE也是一个宏定义
回复

使用道具 举报

106

主题

418

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2016-7-26
在线时间
123 小时
 楼主| 发表于 2016-8-18 11:41:01 | 显示全部楼层
慕名兰 发表于 2016-8-18 11:35
难道我就能在不同的头文件里面一个定义枚举一个定义成宏定义,标识符是一样的都不行?

啊,我懂了,有了宏定义,这个标识符不能乱修改,谢谢了!!!
回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2016-3-3
在线时间
16 小时
发表于 2016-8-18 11:41:02 | 显示全部楼层
枚举的成员只能是未被使用标示符  
回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2016-3-3
在线时间
16 小时
发表于 2016-8-19 10:14:45 | 显示全部楼层
慕名兰 发表于 2016-8-18 11:35
难道我就能在不同的头文件里面一个定义枚举一个定义成宏定义,标识符是一样的都不行?

楼主,经过验证是否能把宏定义的标识符作为枚举的成员呢?
回复

使用道具 举报

106

主题

418

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2016-7-26
在线时间
123 小时
 楼主| 发表于 2016-8-19 18:55:02 | 显示全部楼层
he282905293 发表于 2016-8-19 10:14
楼主,经过验证是否能把宏定义的标识符作为枚举的成员呢?

不行   
回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2016-3-3
在线时间
16 小时
发表于 2016-8-20 09:56:13 | 显示全部楼层

那楼主怎么还把二楼设成了最佳答案?
回复

使用道具 举报

106

主题

418

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2016-7-26
在线时间
123 小时
 楼主| 发表于 2016-8-22 11:55:01 | 显示全部楼层
之前很早就设了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 09:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表