如何使用 stdint.h 的 int64_t 变量(cpcheck 认为它是有符号整数)防止 %"PRIi64" (%lld) 的 cppcheck (v1.72) 警告
Posted
技术标签:
【中文标题】如何使用 stdint.h 的 int64_t 变量(cpcheck 认为它是有符号整数)防止 %"PRIi64" (%lld) 的 cppcheck (v1.72) 警告【英文标题】:How to prevent cppcheck (v1.72) warnings for %"PRIi64" (%lld) with a int64_t variable (cpcheck thinks it is a signed int) of stdint.h 【发布时间】:2016-03-15 08:14:47 【问题描述】:对于一个序列
typedef int64_t I64;
I64 i=5;
printf("%"PRIi64",i);
cppcheck 给出以下警告:
警告:格式字符串(第 1 号)中的 %lld 需要“long long”,但参数类型为“signed int”。
makro PRIi64 被 lld 解析,这是正确的,但是不接受 64 位整数类型作为 long long int。
我希望有办法解决这个问题,因为我们在项目中收到了很多这样的警告,并且再也看不到真正的错误了。
【问题讨论】:
“无关报价”是什么意思? “PRIi64”取自“inttypes.h”(C99),通常需要编写 32/64 位独立代码,因为对于 int64_t (stdint.h),您需要 32 位引擎上的 %lld 和 64 位引擎上的 %ld。 是的,但这与我的真正问题无关。这里更正确: printf("somthing %"PRIi64" else",i); 【参考方案1】:最新版本的 Cppcheck 没有显示关于以下示例代码的警告:
void f(void)
typedef int64_t I64;
I64 i=5;
printf("%"PRIi64",i);
【讨论】:
以上是关于如何使用 stdint.h 的 int64_t 变量(cpcheck 认为它是有符号整数)防止 %"PRIi64" (%lld) 的 cppcheck (v1.72) 警告的主要内容,如果未能解决你的问题,请参考以下文章