gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:09:00 24 4
gpt4 key购买 nike

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

最佳答案

这是否有效取决于编译器使用的 C 标准。

来自 this string literal reference

Only two narrow or two wide string literals may be concatenated. (until C99)

If one literal is unprefixed, the resulting string literal has the width/encoding specified by the prefixed literal. If the two string literals have different encoding prefixes, concatenation is implementation-defined. (since C99)

[强调我的]

因此,如果您使用的是旧编译器或不支持 C99 标准(或更高版本)的编译器,这是不可能的。除了fixed-width integer types在 C99 中被标准化,所以对于这样的旧编译器,宏并不真正存在,这使得这个问题没有实际意义。

对于支持 C99 及更高版本的更现代的编译器,这不是问题,因为字符串-文字连接将起作用,并且编译器会将无前缀的字符串转换为宽字符字符串,例如,

wprintf(L"Value = %" PRIu32 "\n", uint32_t_value);

将正常工作。


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

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

...

wprintf(L"Value = %" L(PRIu32) L"\n", uint32_t_value);

关于c++ - 如何通过 wprintf 函数打印 uint32_t 变量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36940063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com