结构体内不定长数组初始化,error: #1077: an initializer cannot be specified for a flexible array member

转载出处:STM32Cube原文

问题描述

最近用NRF24L01的驱动发现一个很特别的结构体,原来是孤陋寡闻了,这个事C99新增的标准,
但是在keil4.7中始终编译报错!
提取出来报错的代码如下:


typedef struct {
     char           *name;
     unsigned char   size;
     unsigned char   rw;
} nrf_reg_bits;

typedef struct {
     unsigned char   count;
     nrf_reg_bits    data[];
} nrf_reg_fields;

nrf_reg_fields nrf_reg_config_fields = {
     .count = 7,
     .data  = {
          REGF("PRIM_RX",       1, 1),
          REGF("PWR_UP",        1, 1),
          REGF("CRCO",      1, 1),
          REGF("EN_CRC",        1, 1),
          REGF("MASK_MAX_RT",   1, 1),
          REGF("MASK_TX_DS",    1, 1),
          REGF("MASK_RX_DR",    1, 1),
     },
};

或者类似下面的初始化怎么才能在keil4中编译通过,我已经设置了–C99了,还是报错

typedef struct _x{
unsigned char a;
unsigned char b;
unsigned char c;
}x;

x data = { 
.a = 1,
.b = 2,
.c = 3,
};

提示错误如下:
error: #1077: an initializer cannot be specified for a flexible array member
指向的是 .data 那一行

解决办法

找到问题所在了, 目前能编译通过的解决办法如下:
在keil编译配置管理的c/c++选项卡中Misc control中填写–gnu
如图
这里写图片描述

在linker选项卡中删除Misc control中的数据
如图
这里写图片描述

这样的话,编译就能不报错,通过了…
至于通过后程序是不是正常的还没测试~~~

补充

经过博主测试,只需加上–gnu就可以正常编译了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值