我正在使用gcc(-std= gnu 99)为一个嵌入式工具链(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
3条答案
按热度按时间lyr7nygr1#
最有可能的是,您的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
到字符串的转换并不困难。iqjalb3h2#
Myriota SDK使用newlib-nano,它不支持int64_t。我必须实现自己的函数来转换为char字符串,或者转换为uint32_t。
eqoofvh93#