如何使用 gcc 编译器 tricore v3.4.6 在 C 中打印 sint32?

How to printf a sint32 in C using gcc compiler tricore v3.4.6?

我正在使用 tricore v3.4.6 编译器。

假设我有一个像 sint32 a = -1 这样的有符号整数 并想用 printf.

打印它

我尝试了 printf("Signed number %i", a) 以及 printf("Signed number %d", a),它们都给我编译器警告,例如

警告: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);