2020-01-01 17:33发布
chess01 发表于 2017-2-10 08:49 除了重定义,没有其他办法了,联合体是不支持自定义变量长度的 struct { uint low:10;
graycker 发表于 2017-2-10 09:19 刚刚在IAR下面试了下,果然可以,谢谢了。
最多设置5个标签!
struct {
uint low:10;
uint mid:10;
uint high:10;
}dat;
#define xxx low
#define yyy mid
dat.xxx=0;
dat.yyy=0;
在keil中编译通过
如存在其他技巧,
我学艺不精,也很难快速理解。
刚刚在IAR下面试了下,果然可以,谢谢了。
这样的宏定义你必须保证其他地方不出现xxx, yyy,否则出错误查都查不出来。
最好的方法是匿名联合。
Keil C中要加入#pragma anon_unions,IAR、GCC、C++应该是不需要加的。
- typedef union{
- struct {
- unsigned low:10;
- unsigned middle:10;
- unsigned high:10;
- };
- struct {
- unsigned xxx:10;
- unsigned yyy:10;
- unsigned zzz:10;
- };
- }data_t;
- data_t dat;
复制代码dat.low和dat.xxx其实是一样的。一周热门 更多>