遇到如下源码的时候,C++Test会报错无法执行静态分析:
static void ill_key_trim_set(ILL_LED_ConfigTy *config)
{
//ok
LED_DRIVER_MsgTy msg1;
msg1.flags = LED_DRIVER_WE;
msg1.led_group = config->led;
msg1.trim = &config->trim;
//report error error: expression must have a constant value
LED_DRIVER_MsgTy msg= {
.flags = LED_DRIVER_WE,
.led_group = config->led, //report error
.trim = &config->trim //report error
};
}
keil项目通过如下选项可以通过编译
C++Test中编译器选项添加 --c99一样会报如下错误:
/Sensor/Sensor/Demo.c 的抑制数据检查中 ...
...完成.
正在检查编码标准和收集数据:
/Sensor/Sensor/Demo.c
"C:\MyProjects\keil4\MDK-ARM\Sensor\Demo.c", line 47: error: expression must
have a constant value
.led_group = config->led,
^
"C:\MyProjects\keil4\MDK-ARM\Sensor\Demo.c", line 48: error: expression must
have a constant value
.trim = &config->trim
^
解决方案:
通过自定义编译器或者修改C++Test编译器的源文件,找到并打开c.psrc文件
在edgtk.optionAlias... 行之后添加如下文代码:
edgtk.optionAlias option=c99 value=--allow_nonconstant_auto_aggr_init_in_c_mode=true
edgtk.optionAlias option=-c99 value=--allow_nonconstant_auto_aggr_init_in_c_mode=true
如: