记录一次printf打印64位格式不对的问题
0、问题背景
最近,在开发中准备使用一个int64_t的变量,记录64bit信息,结果在调试过程中,打印这个变量值的时候,一直是有问题的,于是去检查代码逻辑,排查半天,最后发现是源头这个打印这个变量的格式出现不对,导致log信息中显示出来的值就不太对。排查了半天时间,特此进行记录一下。
当使用printf打印64位整型(long long)时,如果没有使用正确的格式说明符%lld,会导致打印结果不正确。
1、解决方案
1.1、常见错误形式
-
使用
%d打印64位整型:long long bigNum = 123456789012345; printf("%d\n", bigNum); // 错误,只会打印低32位 -
在32位系统上混淆
long和long long:printf("%ld\n", bigNum); // 在32位系统上可能出错
1.2 、正确打印格式
使用正确的格式符号
long long bigNum = 123456789012345;
int_64 bigNum = 123456789012345;
printf("%lld\n", bigNum); // 正确方式
2、总结
日常使用的变量,仅仅通过%d的变量的大小的范围,就可以打印出来,这个64bit的long long类型的变量,平时开发中所使用的并不是很多,导致在比较“不容易”犯错的地方,确实是大意了。
切忌经验主义,特此记录一下。🤔

浙公网安备 33010602011771号