如何给结构体内的变量起多个名字?

2020-01-01 17:33发布

本帖最后由 graycker 于 2017-2-10 08:35 编辑

用联合体可以实现,有更好的办法没?特别是当变量是自定义位大小类型的时候。比如:
typedef struct
{
  unsigned low:10;
  unsigned middle:10;
  unsigned high:10;
}data_t;

修改原因:描述错误
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
starsnow
1楼-- · 2020-01-01 20:04
再嵌套个 union 类型?
graycker
2楼-- · 2020-01-01 21:39
 精彩回答 2  元偷偷看……
chess01
3楼-- · 2020-01-02 00:39
除了重定义,没有其他办法了,联合体是不支持自定义变量长度的
struct {
        uint low:10;
        uint mid:10;
        uint high:10;
}dat;


#define xxx low
#define yyy mid

dat.xxx=0;
dat.yyy=0;
在keil中编译通过
security
4楼-- · 2020-01-02 05:52
要实现的话,就用常见的联合体吧,
如存在其他技巧,
我学艺不精,也很难快速理解。
graycker
5楼-- · 2020-01-02 10:44
chess01 发表于 2017-2-10 08:49
除了重定义,没有其他办法了,联合体是不支持自定义变量长度的
struct {
        uint low:10;

刚刚在IAR下面试了下,果然可以,谢谢了。
takashiki
6楼-- · 2020-01-02 12:00
graycker 发表于 2017-2-10 09:19
刚刚在IAR下面试了下,果然可以,谢谢了。

这样的宏定义你必须保证其他地方不出现xxx, yyy,否则出错误查都查不出来。
最好的方法是匿名联合。
Keil C中要加入#pragma anon_unions,IAR、GCC、C++应该是不需要加的。
  1. typedef union{
  2.     struct {
  3.         unsigned low:10;
  4.         unsigned middle:10;
  5.         unsigned high:10;
  6.     };
  7.     struct {
  8.         unsigned xxx:10;
  9.         unsigned yyy:10;
  10.         unsigned zzz:10;
  11.     };
  12. }data_t;

  13. data_t dat;
复制代码dat.low和dat.xxx其实是一样的。

一周热门 更多>