Как распечатать 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);
Другие вопросы по тегам