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