2017-08-28 205 views
1

我在看下面的代碼:C中的printf中沒有引號`PRIu32`?

#include <stdio.h> 
#include <inttypes.h> 

int main() 
{ 
    uint32_t total = 0; 

    printf("\tTotal: %"PRIu32"\n\n", total); 
    return total; 
} 

如何PRIu32配合入printf語法?我的意思是,我可以猜到,Iu32可能意味着「整數無符號32位」。但是,我不確定在man 3 printf中找到哪個表單可以容納引號外的變量 - 以及這可以如何推廣到引號外的其他語句。

+0

如果您使用'gcc',請嘗試'gcc prog.c -E -P'。此外,在預編譯預處理中還會合並字符串文字序列,如「\ tTotal:%」「u」「\ n \ n」'。 – BLUEPIXY

+0

@BLUEPIXY運行'$ gcc progc -E -P test.c'會給我'clang:error:no such file or directory:'progc''。那個命令應該做什麼? – Alex

+0

將'prog.c'替換爲您嘗試編譯的C源文件。 – BLUEPIXY

回答

4

這是一個format macro constant

它們用於在不同平臺上對值進行可移植的格式化,其中原始數字類型的大小可能不同。

問題中的問題是打印十進制格式的無符號32位整數的格式。

這些宏的工作原理是因爲C將連續的常量字符串連接起來。例如,編譯器將三個字符串"\tTotal: %" "u" "\n\n"連接成單個字符串"\tTotal: %u\n\n"

+0

那就是問題 – pm100

+1

@ pm100的引號數量不一樣嘿,別再迂腐了。他的評論本身已足以回答我的問題...... – Alex

+1

@ pm100這些宏被定義,所以它們被擴展爲字符串,例如。 '#define PRIu32「u」' –