Как распечатать sint32 в C, используя компилятор gcc 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
2 ответа
В отличие от предложенного в комментариях к вопросу, sint32
не является чем-то необычным в критически важных для безопасности и встроенных системах и обычно возвращается к int
, (например, в некоторых средах MISRA).
следовательно
sint32 a = -1;
printf("%d", a);
все равно надо делать свое дело. протестировано с gcc v5.2.1 и arm-gcc v5.2.1 (-Wall и без предупреждений).
Если он все еще дает вам предупреждение, попробуйте выяснить, что sint32
действительно карты и попробуйте long
-Распечатать: printf("%ld")
, Тем не менее, затем дважды проверьте, если длина байта sint32
на самом деле это 32bit? (и некоторые системы могут даже иметь менее 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);