跨平台(32bit和64bit)的 printf 格式符 %lld 输出64位的解决方式
问题描述
在 C/C++ 开发中,使用 printf 打印 64 位变量比较常用,通常在 32 位系统中使用 %lld 输出 64 位的变量,而在 64 位系统中则使用 %ld;
如果在 32 位系统中使用 %ld 输出 64 位变量,很可能打印的值是异常的,而在 64 位系统中则使用 %lld,则通常会出现编译报错,类似如:
format '%lld' expects type 'long long int', but argument 4 has type 'int64_t'[ -Werror=format=]
如果在跨平台移植代码时,通常就会遇到这种情况。
解决方案
为了解决跨平台移植的问题,% PRId64 的书写方式解决了跨平台的问题,主要是为了同时支持32位和64位操作系统。PRId64表示64位整数,在32位系统中表示long long int,在64位系统中表示long int。
写法格式:
uint64_t value = 1560;
printf("value = %" PRId64 "\n", value);
效果如下:
uint64_t value = 1560;
printf("value = %" "%ld" "\n", value); // 64bit OS
printf("value = %" "%lld" "\n", value); // 32bit OS
或者
uint64_t value = 1560;
printf("value = %ld\n", value); // 64bit OS
printf("value = %lld\n", value); // 32bit OS
本文来自博客园,作者:大橙子疯,转载请注明原文链接:https://www.cnblogs.com/const-zpc/p/16364422.html