有人能告诉我这是什么意思吗?

3

这是一个非常基础的问题,请帮我澄清一下。

#define TLVTAG_APPLICATIONMESSAGE_V             "\xDF01"
printf("%s\n", TLVTAG_APPLICATIONMESSAGE_V);

表示将要打印的内容。


GCC 4.3.4 无法编译此代码。你在哪里找到它的?它能够编译通过吗? - Björn Pollex
2个回答

6
按照C++标准2.13.2和2.13.4的参考,逐步进行以下操作:
#define意味着您可以在第一个出现的地方替换第二个内容,因此printf将被处理为printf("%s\n", "\xDF01");。
"\xDF01"是一个由一个字符组成的字符串(加上零字节终止符),\x表示将下一个字符作为十六进制值,因此它尝试将DF01作为十六进制数并将其装入char中。
由于标准引用的字符串包含char而不是wchar_t,并且您几乎肯定正在使用8位char,结果是实现定义的,如果没有您的实现文档,那么就真的无法进一步推测了。
现在,如果该字符串为L"\xDF01",则其元素将为wchar_t,这些是宽字符,通常为16或32位,DF01值将变成一个字符(可能是Unicode)值,打印语句将打印出字符\xDF和字符\x01,顺序不一定相同,因为printf打印char而不是wchar_t。wprintf将打印整个wchar_t。

4

有人想以最糟糕的方式打印一个Unicode字符。 - David Thornley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接