'long long' 的格式说明符

43

我声明了一个64位计数器变量:

long long call_count;

在打印语句中应该使用什么格式说明符?

我尝试了 %l%ld%ll,但似乎都不正确。

我使用 Diab C 编译器将我的应用程序代码编译成在 pSOS 操作系统上运行的代码。

7个回答

69
根据C99规范,应该使用"%lld"(例如在这里)。如果Diab C不符合C99规范,则需要查看编译器文档,但我没有快速通过Google找到。

7
对于'long long unsigned int'应使用"%llu"。 - Atiq Rahman

17

这是"%lli"(或等价的"%lld"


12

微软和Watcom使用%I64d(大写的"eye"),其他人使用%lld(小写的"ell ell")。


使用 %I64d(大写字母 I):请重试? - Robert Gamble
5
微软使用 ll (L L) 代表 long long;I64 (I 64) 代表 __int64。http://msdn.microsoft.com/en-us/library/tcxf1dw6.aspx - Rob Kennedy
1
当格式说明符采用等宽字体(提供了一个合理的等宽字体)时,它们就不那么含糊了。 - dreamlax

6
这里已经描述了一种方法,甚至还有更多: 使用printf跨平台打印64位整数 简而言之,您可以使用inttypes.h中的PRId64宏以半可移植的方式以十进制打印64位整数。还有其他宏(如PRIx64)。

3
也许是%lld?我认为这是gcc的格式,不知道Diab C编译器的任何信息。

3
%lld是long long类型的标准转换说明符,据我所知,Windows是唯一不支持它的操作系统(但他们不支持很多标准)。此外,请注意这只适用于使用标准C库而非编译器的情况。 - Robert Gamble

2

对于有符号整型,它是%lld,而对于无符号整型,它是%llu。


1
long long t1;             //signed
unsigned long long t2;    //unsigned

printf("%lld",t1);
printf("%llu",t2);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接