anonymous structs匿名结构体

在Keil上编程时这样一个union

typedef union CDATE {
	uint16_t value;
	struct {
		uint16_t	reserved : 1;
		uint16_t	day : 5;	// day: 0-30, 0=1st, 1=2nd, ...
		uint16_t	month : 4;	// month: 0-11, 0=JANURAY, 1=FEBRARY, ...
		uint16_t	year : 6;	// year: 0-63, 0=TIM_YEAR_BASE
	};
} CDATE;

编译器报错:error:  #3093: anonymous structs are only supported in –gnu mode, or when enabled with #pragma anon_unions

默认设置无法使用匿名结构体,解决的办法:

  1. 给结构体添加名字,比如day,但是使用的时候就必须键入这个名字,比如:
    typedef union CDATE {
    	uint16_t value;
    	struct {
    		uint16_t	reserved : 1;
    		uint16_t	day : 5;		// day: 0-30, 0=1st, 1=2nd, ...
    		uint16_t	month : 4;	// month: 0-11, 0=JANURAY, 1=FEBRARY, ...
    		uint16_t	year : 6;		// year: 0-63, 0=TIM_YEAR_BASE
    	}date;
    } CDATE;
    CDATE date;
    date.date.day = 1;

  2. 在Misc Controls中添加–gnu
  3. 在code中添加#pragma anon_unions

后两种方法都不需要加入结构体名字,使用时会比较方便,比如:

CDATE date;
date.day = 1;

我在使用第二种方法编译时STM32的hal driver出现了警告,别小瞧了警告,有时候系统功能不正常可能就是某个警告引起的,为了避免可能出现的问题,还是选择了第三种方法。

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值