gpt4 book ai didi

c++ - C++ 编译器何时开始考虑字符串文字字符转义中的两个以上十六进制数字?

转载 作者:IT老高 更新时间:2023-10-28 13:24:25 25 4
gpt4 key购买 nike

我在 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 编译器只会在 \x 之后考虑 两个 十六进制数字,而不再考虑。

我可以想到一种解决方法:

char foo[] = "\xAB""Echo";

但这有点难看。所以我有三个问题:

  • 什么时候改变的?

  • 为什么编译器不只接受宽字符串文字的>2位十六进制转义?

  • 有没有比上面更尴尬的解决方法?

最佳答案

GCC 仅为 following the standard . #877 : "每个 [...] 十六进制转义序列是可以构成转义序列的最长字符序列。"

关于c++ - C++ 编译器何时开始考虑字符串文字字符转义中的两个以上十六进制数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5784969/

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