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

来源:互联网 发布:c语言吊死鬼游戏 编辑:程序博客网 时间:2024/05/16 01:49

转载出处: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就可以正常编译了

阅读全文
0 0
原创粉丝点击