1

我正在使用 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

4

2 回答 2

4

很可能,您的 C 库,特别是它的实现printf不支持 C99。

类型long long int%lld格式由 1999 ISO C 标准 (C99) 引入。Usinggcc -std=c99使编译器尝试符合 C99,但它不能使运行时库执行它未实现的事情。编译器支持的内容与运行时库支持的内容不匹配。

在 C90 中,以格式字符串调用printfwith%lld具有未定义的行为。

是否%ld适用于类型的参数long int?如果参数不超过LONG_MAX,则转换和使用%ld可能是一个很好的解决方法。如果您需要打印超过 的值,那么LONG_MAX实现long long int到字符串的转换并不是非常困难。

于 2019-10-04T03:35:03.050 回答
0

Myriota SDK 使用不支持 int64_t 的 newlib-nano。我必须实现自己的函数来转换为 char 字符串,或者转换为 uint32_t。

于 2019-10-06T01:40:05.303 回答