-5

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

假设我有一个有符号整数sint32 a = -1 ,想用printf.

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

警告:int 格式,sint32 arg

4

2 回答 2

1

与问题评论中建议的不同,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 位的架构)

于 2016-02-12T14:39:42.480 回答
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);
于 2016-02-12T16:45:28.967 回答