文章
博客 网店

 RealView不支持匿名联合的问题


  FreeRtos中实现消息时用到一个类似下面的结构体:

typedef struct tag_MyMsg
{
  uint8_t id;    //消息ID

  union
  {
    struct  tagxxx
    {
      uint16_t x;  //参数1
      uint16_t y;  //参数2
      uint16_t z; //参数3
    }Par;

    uint8_t Buf[6];
  };
}MSG,*PMSG;


   问题出现在这个匿名的联合(union),编译器在默认情况下不承认这个联合,总是报出警告。
无奈只能给联合取一个名字,但结果是访问结构体中成员时就会啰嗦不少,如果支持匿名联合
那访问x成员的引用方式为o.Par.x 即可(o为结构体变量 )
但要是给联合取个名字,例如UN,那么访问x变量不得不写成o.UN.Par.x
搞的我很不爽。
问题解决了,原来RealView默认情况下匿名结构和联合的功能是关闭的
要想支持需要打开编译器一个开关,如下一条编译器指令便打开此开关:


#pragma anon_unions


将此声明在结构体定义之前即可!

芯艺工作室    蒙ICP备06005492号
Copyright© 2004-2023 ChipArt Studio All Rights Reserved