2016-07-28 99 views
-1

打印U32我試圖打印U32變量C,不知道什麼是它給了錯誤的方式寫用printf用C

printf("print_variable %u\n", u32"); 

,我應該逼(INT)U32?

+4

u32是什麼類型的?它是如何聲明的? –

+0

產生了什麼錯誤? – rici

+0

給***什麼***錯誤?你沒有注意到'u32''中的語法錯誤嗎?我確定編譯器確實如此。你建議的cast((int)u32')無論如何都是錯誤的:'%u'是* unsigned *。 –

回答

1

我假定你的意思uint32_t,使包括inttypes.h和使用

printf("Value: %" PRIu32 "\n", u32); 
+0

缺少「%」號 – FredK

+0

@chqrlie它沒有 –

1

沒有標準型U32

假設它是一個整數類型,可能是一個32位無符號類型的typedef,您可以安全地打印出值是這樣的:

printf("%lu\n", (unsigned long)u32); 

我用unsigned long而不是unsigned int因爲unsigned int可以合法僅16位寬。 unsigned long保證至少爲32位寬,因此它可以保存u32類型的任何可能的值(假設u32被定義爲理智的)。對於64位無符號類型,您可以安全使用unsigned long long"%llu"

從C99開始,標準C庫包含一個標頭<stdint.h>,該標頭定義了固定寬度類型,包括uint32_t,它可能與U32的屬性相同。我不建議對工作代碼進行大規模修改,只是使用標準化的typedef,但在新代碼中,您應該使用uint32_t。標準頭<inttypes.h>定義宏的使用與printf,讓你寫,爲iharob's answer suggests

uint32_t u32; 
printf("%" PRIu32 "\n", u32); 

PRIu32擴展爲一個字符串;三個文字"%"PRIu32"\n"是由編譯器連接在一起。)

雖然我個人發現宏名稱(記錄在N1570第7.8節)難以記憶。我經常只是將其轉換爲我知道的足夠寬的預定義類型,如上所示。

1

當不確定使用什麼格式說明打印一些整數:

  1. 如果類型在C像int, unsigned long long, size_t, uint8_t等指定類型,最好先使用的匹配符"%d", "%llu", "%zu", "%" PRIu8等衆多資源列出相應的類型爲說明符。

    #include <inttypes.h> 
    printf("%" PRIu32 "\n", u32); // type known to be 32-bit unsigned - no padding. 
    
  2. 當類型的標準類型的關係不明確,但其正負號的煩躁是已知的,代碼可轉換爲相應的寬型。

    #include <stdint.h> 
    printf("%ju\n", (uintmax_t) u32); // type is known to be some unsigned integer