这个问题的另一种表达方式可能是“如何在printf中结束格式说明符”
如果我想要以这种格式 100us
输出微秒,可以使用以下代码...
long microseconds = 100L;
printf("%lus", microseconds);
只打印了100s
,因为u
与%l
结合在一起,它将格式说明符解释为unsigned long
而不是long
。
这个问题的另一种表达方式可能是“如何在printf中结束格式说明符”
如果我想要以这种格式 100us
输出微秒,可以使用以下代码...
long microseconds = 100L;
printf("%lus", microseconds);
只打印了100s
,因为u
与%l
结合在一起,它将格式说明符解释为unsigned long
而不是long
。
仅需编写代码
long microseconds = 100L;
printf("%ldus", microseconds);
%lius
。 - Gabriel Stapleslong microseconds = 100L;
printf("%ld" "us", microseconds);
相邻的字符串字面量将被连接。以上代码等同于"%ldus"
。
// or maybe via macros
#DEFINE TIME_FMT "%ld"
#DEFINE TIME_SUFFIX "us"
...
printf(TIME_FMT TIME_SUFFIX, microseconds);
%l
本身并不是一个完整的格式规范。它可能会在某些 C 库中意外地运行,但依赖这一点是不正确的。始终给出完整的格式规范(在此情况下应使用%ld
),就不会遇到这个问题。 - zwol100L
中的L
没有什么作用。 - chux - Reinstate Monica