我有嵌入式系统项目,我正在使用 Ceedling(= Unity 和 Cmock)进行测试。
在一个测试用例中,被测代码就是这么简单:
uint32_t zero = eeprom_read_dword((uint32_t*)&non_volatile_zero);
sprintf(output, "%lu", zero);
由于嵌入式系统是 8 位架构,%lu
必须在 sprintf 中用于格式化 32 位 unsigned int 以进行打印。但是,桌面环境 (GCC) 用于测试构建和运行测试(并且不能选择使用嵌入式构建进行测试)。这会导致下一个警告:
warning: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘uint32_t’ {aka ‘unsigned int’} [-Wformat=]
62 sprintf(output, "%lu", zero);
~~^ ~~~~
| |
| uint32_t {aka unsigned int}
long unsigned int
%u
警告本身在桌面环境中是正确的,但从嵌入式系统的角度来看是误报。
我的问题是如何为测试构建设置 -Wno-format 编译器标志,因为我没有在 project.yml 中定义工具部分,因为使用了默认的 GCC?或者甚至有办法告诉 ceedling 目标系统正在使用 8 位架构?