cmake %zu格式说明符与C99不工作

gopyfrb3  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(130)

我愿意使用格式字符串中的%zu说明符打印size_t值,但是,我总是得到“zu”作为输出,而不是size_t变量中的实际值:

size_t val = 10;
printf("val: %zu\n", val);  // outputs "zu", not "10"

字符串
我已经看到,对于其他面临类似问题的人,解决方案是将C标准设置为C99或更高。
我正在用CMake构建我的项目,其中有以下行:

# Set the C standard to C11
set(CMAKE_C_STANDARD 11)


所以,我想我可以走了,但不,我仍然得到同样的问题。
”我可以错过一些东西吗?**
我使用以下堆栈:

  • CMake版本3.22
  • 使用arm-none-eabi-gcc版本10.3.1工具链进行交叉编译
  • 编译标志:-Os -g -ffunction-sections -fdata-sections -fno-common -fmessage-length=0 -mcpu=cortex-m4 -mthumb -mthumb-interwork -mlittle-endian -mfloat-abi=hard -mfpu=fpv4-sp-d16

我还添加了-std=c11编译选项以防万一。还是不管用。

dffbzjpn

dffbzjpn1#

我是不是漏掉了什么?
您正在使用的Newlib标准C库实现禁用size_t,并且在其“nano”版本的printf中禁用long long

uqxowvwt

uqxowvwt2#

目标系统上使用的C库不支持格式长度修饰符z。要么它太旧了,不支持C99扩展,要么它被故意削弱以保存一些(相当少的)代码量,只支持%d%u%x。您应该将size_t值转换为(unsigned)并使用%u

size_t val = sizeof(int);
printf("val: %u\n", (unsigned)val);  // probably outputs "val: 4"

字符串

相关问题