2016-02-12 42 views
-5

我正在使用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' .. –

回答

1

不像在評論這個問題的建議,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

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