如何通过wprintf函数打印uint32_t变量值?

Con*_*tor 0 c c++ printf wchar-t uint32-t

众所周知,要打印变量值,类型是固定宽度整数类型之一(如uint32_t),您需要包含cinttypes(在C++中)或inttypes.h(在C中)头文件,并使用格式说明符宏PRIu32.但是在使用wprintf函数时如何做同样的事情?L在这种情况下,这样的宏应该扩展为带有前缀的字符串文字.

Som*_*ude 5

如果这可行或不实际取决于编译器使用的C标准.

这个字符串文字参考

只能连接两个窄字符串或两个宽字符串字符串.(直到C99)

如果一个文字没有前缀,则生成的字符串文字具有由前缀文字指定的宽度/编码.如果两个字符串文字具有不同的编码前缀,则连接是实现定义的.(自C99起)

[强调我的]

因此,如果您使用的是旧编译器或不支持C99标准(或更高版本)的编译器,则无法实现.除了固定宽度整数类型在C99中被标准化,因此对于这样的旧编译器来说宏并不存在,这使问题没有实际意义.

对于支持C99及更高版本的更现代的编译器,这是一个非问题,因为字符串文字连接将起作用,编译器将把非前缀字符串转换为宽字符串,所以做例如

wprintf(L"Value = %" PRIu32 "\n", uint32_t_value);
Run Code Online (Sandbox Code Playgroud)

会很好的.


如果你有一个pre-C99编译器,但仍然有宏和固定宽度的整数类型,你可以使用类似函数的宏L来为字符串文字添加前缀.就像是

#define LL(s) L ## s
#define L(s) LL(s)

...

wprintf(L"Value = %" L(PRIu32) L"\n", uint32_t_value);
Run Code Online (Sandbox Code Playgroud)