我在 C++ 中有一个(生成的)文字字符串,其中可能包含需要使用转义的字符\x
符号。例如:
char foo[] = "\xABEcho";
然而,g++(版本 4.1.2,如果重要的话)会抛出错误:
test.cpp:1: error: hex escape sequence out of range
编译器似乎正在考虑Ec
字符作为前面的十六进制数字的一部分(因为它们看起来像十六进制数字)。由于四位十六进制数字不适合char
,会出现错误。显然对于宽字符串文字L"\xABEcho"
第一个字符是 U+ABEC,后面是L"ho"
.
似乎在过去几十年里,这种情况发生了变化,而我却从未注意到。我几乎可以肯定旧的 C 编译器只会考虑two之后的十六进制数字\x
,不再继续寻找。
我可以想到一种解决方法:
char foo[] = "\xAB""Echo";
但这有点难看。所以我有三个问题:
海湾合作委员会只是遵循标准 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33167. #877 http://c0x.coding-guidelines.com/6.4.4.4.html:“每个[...]十六进制转义序列是可以构成转义序列的最长字符序列。”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)