我正在使用tricore v3.4.6编译器。
假设我有一个有符号整数,如sint32 a = -1
并希望使用printf
打印出来。
我尝试了printf("Signed number %i", a)
以及printf("Signed number %d", a)
,它们都给了我编译器警告,例如
警告:int格式,sint32 arg
答案 0 :(得分:1)
与问题评论中的建议不同,sint32
在安全关键系统和嵌入式系统中并不少见,并且通常会回归到int
的类型转换。 (例如在某些MISRA环境中)。
因此
sint32 a = -1;
printf("%d", a);
无论如何都应该这样做。用gcc v5.2.1和arm-gcc v5.2.1测试(-Wall并且没有警告)。
如果仍然发出警告,请尝试找出sint32
实际映射到的内容并尝试long
- 打印:printf("%ld")
。但是,请仔细检查sint32
的字节长度是否真的是32位? (有些系统甚至可能有不到32位的架构)
答案 1 :(得分:0)
要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);