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

时间:2016-02-12 14:16:47

标签: c printf signed-integer

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

假设我有一个有符号整数,如sint32 a = -1 并希望使用printf打印出来。

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

警告:int格式,sint32 arg

2 个答案:

答案 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);