STM32
直播中

张红

7年用户 1255经验值
私信 关注
[问答]

结构体的初始化怎么才能在keil4中编译通过呢

结构体的初始化怎么才能在keil4中编译通过呢?有何解决办法?

回帖(1)

周灿金

2021-12-20 10:26:48
问题描述

  最近用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就可以正常编译了
举报

更多回帖

发帖
×
20
完善资料,
赚取积分