我正在使用gcc (-std=gnu99)开发一个嵌入式工具链(Myriota),而且我对printf有问题。
当我尝试以下代码时:
long long int time = TimeGet();
printf("\nSeconds since epoch: %lld\r\n", time);
它打印:
Seconds since epoch: ld
使用"%" PRId64
打印相同的"ld“。
有什么想法吗?如果你能带我去正确的地方,我会很感激的。
编辑变量类型修正的long long int time
发布于 2019-10-04 03:35:03
最有可能的是,您的C库,特别是它的printf
实现不支持C99。
long long int
类型和%lld
格式是1999年ISO C标准(C99)提出的。使用gcc -std=c99
使编译器尝试遵从C99,但它不能使运行时库做它没有实现的事情。编译器支持的和运行时库支持的不匹配。
在C90中,使用格式字符串中的%lld
调用printf
具有未定义的行为。
%ld
是否适用于long int
类型的参数?如果参数不超过LONG_MAX
,那么转换和使用%ld
可能是一个很好的解决办法。如果需要打印超出LONG_MAX
的值,实现long long int
到字符串的转换并不困难。
发布于 2019-10-06 01:40:05
Myriota SDK使用的是newlib-nano,它不支持int64_t,我必须实现自己的函数才能转换为cast,或者强制转换为uint32_t。
https://stackoverflow.com/questions/58229030
复制相似问题