我正在使用 tricore v3.4.6 编译器。
假设我有一个有符号整数sint32 a = -1
,想用printf
.
例如,我尝试printf("Signed number %i", a)
了以及printf("Signed number %d", a)
which 都给了我编译器警告
警告:int 格式,sint32 arg
我正在使用 tricore v3.4.6 编译器。
假设我有一个有符号整数sint32 a = -1
,想用printf
.
例如,我尝试printf("Signed number %i", a)
了以及printf("Signed number %d", a)
which 都给了我编译器警告
警告:int 格式,sint32 arg
与问题评论中建议的不同,sint32
在安全关键系统和嵌入式系统中并不少见,通常会退回到int
. (例如在某些MISRA环境中)。
因此
sint32 a = -1;
printf("%d", a);
无论如何应该做的伎俩。使用 gcc v5.2.1 和 arm-gcc v5.2.1 测试(-Wall 并且没有警告)。
如果它仍然给您一个警告,请尝试找出sint32
真正映射到的内容并尝试long
-print: printf("%ld")
。但是,然后仔细检查字节长度是否sint32
真的是 32 位?(有些系统甚至可能有不到 32 位的架构)
对于缺少已定义匹配前缀(如、、等)的printf()
任何有符号整数,只需强制转换为最广泛的已知类型。"l"
"ll"
"h"
#include <stdint.h>
sint32 a = -1;
printf("Signed number %jd", (intmax_t) a);
// or lacking intmax_t
sint32 a = -1;
printf("Signed number %lld", (long long) a);