2016-02-12 6 views
-5

Я работаю с компилятором tricore v3.4.6.Как распечатать sint32 в C с помощью gcc-компилятора tricore v3.4.6?

Предположим, что у меня есть целое число со знаком, например sint32 a = -1 , и хочу напечатать это с помощью printf.

Я попытался printf("Signed number %i", a), а также printf("Signed number %d", a) который и дает мне компилятор предупреждения, например

предупреждение: INT формат, sint32 агд

+2

В чем заключается этот тип 'sint32'? –

+3

Что такое * 'sint32'? «Typedef»? «# Define»? От куда это? – EOF

+0

просто слепая догадка, попробуйте с помощью 'PRId32' .. –

ответ

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-битную архитектуру)

+0

, как указано в комментариях выше, да printf («% ld») работает для меня без предупреждения. – floquet22

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

 Смежные вопросы

  • Нет связанных вопросов^_^