在C中的printf中,什么是未引用的`PRIu32`?

Ale*_*lex 4 c printf uint32

我正在查看以下代码:

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

int main()
{
    uint32_t total = 0;

    printf("\tTotal: %"PRIu32"\n\n", total);
    return total;
}
Run Code Online (Sandbox Code Playgroud)

如何PRIu32适应printf语法?我的意思是,我可以猜测,Iu32可能意味着"整数无符号32位".但是,我不确定找到哪种形式man 3 printf可以容纳引号之外的变量 - 以及如何将其推广到引号外的其他语句.

Som*_*ude 9

它是格式宏常量.

它们用于沿着不同平台的值的可移植格式,其中原始数字类型的大小可能不同.

问题中的一个是以十进制格式打印无符号32位整数的格式.

这些宏有效,因为C连接连续的常量字符串文字.例如,编译器"\tTotal: %" "u" "\n\n"将三个字符串连接成单个字符串"\tTotal: %u\n\n".

  • @ pm100定义宏以便将它们扩展为字符串,例如`#define PRIu32"u"` (3认同)
  • 我并不是迂腐,我很好奇它为什么有效。这个答案很好,但没有解释你的情况发生了什么 (2认同)