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

问题描述:

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

假设我有一个有符号整数,如sint32 a = -1 ,并且想用printf打印。

我试图printf("Signed number %i", a)以及printf("Signed number %d", a)这既给了我编译器的警告,例如

警告:INT格式,SINT32 ARG

+2

什么是'sint32'类型? –

+3

* * sint32'是什么?一个'typedef'?一个'#define'?它从何而来? – EOF

+0

只是一个盲目的猜测,尝试用'PRId32' .. –

不像在评论这个问题的建议,sint32是不是在安全少见关键和嵌入式系统,并且通常会回退到int的类型转换。 (例如在某些MISRA环境中)。

因此

sint32 a = -1; 
printf("%d", a); 

应该反正做的伎俩。使用gcc v5.2.1和arm-gcc v5.2.1进行测试(-Wall和no warnings)。

如果它仍然给你一个警告揣摩什么sint32真正映射到,并尝试long -print:printf("%ld")。但是,再仔细检查一下sint32的字节长度是否真的是32bits? (和一些系统甚至可以具有比32位体系结构以下)

+0

正如上面评论中提到的那样,yes printf(“%ld”)对我没有任何警告。 – floquet22

为了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);