gpt4 book ai didi

c - 如何将宽字符串文字与 PRId32、PRIu64 等连接起来?

转载 作者:太空狗 更新时间:2023-10-29 17:02:30 25 4
gpt4 key购买 nike

假设我需要打印一个带有 int32_t 的格式化字符串使用 <inttypes.h> 中的 printf 格式说明符.

int32_t i = 0;
printf("%" PRId32 "\n", i);

如果我尝试在 Visual C++ 2013 中对宽字符执行相同的操作,则会失败:

#define W_(val) L ## val
#define W(val) W_(val)
wprintf(L"%" W(PRId32) L"\n", i);

error C2308: concatenating mismatched strings

如何将宽字符串文字与格式转换说明符宏连接起来?

最佳答案

问题是双重的。首先,如 rici 的回答所述,C99 和 C++11 都添加了对将窄字符串文字和宽字符串文字连接在一起的支持,因此您不需要通过在 L 前面加上 L 来加宽窄文字。Visual C++ 尚不支持此功能C 或 C++ 的功能。

因为编译器尚不支持此功能,我们应该在库中使您能够使用类似于您的答案中的技术显式加宽这些字符串文字。不幸的是,我们定义这些宏的方式使得它们可以扩展为多个字符串文字。例如,PRId32 扩展为 "l""d"

这是有效的,但它确实会阻止你扩大,因为没有办法将 L 添加到第二个字符串文字(使 "d" 成为L“d”)。恐怕如果不自己(重新)定义宏,我看不出有什么方法可以完成这项工作。

我在内部发现了一个错误,这样如果编译器在下一版本的预处理期间不添加对混合宽度文字串联的支持,我们可以重新访问这些定义,以便有可能显式地扩大它们。

关于c - 如何将宽字符串文字与 PRId32、PRIu64 等连接起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21788652/

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