前缀字符串文字与前缀连接?

在关于这个答案的评论中,对翻译过程中是否需要C2011的一致性实现来执行字符串连接的未加前缀的字符串文字和相邻的前缀字符串文字产生了​​争议。 例子:

char16_t ustring[] = u"Unicode" " string";
wchar_t wstring[] = "Wide " L"string";

C99确实规定了这种连接发生。 C ++ 2011在这个话题上也很清楚。 但是,C2011的相关条款与其中任何一条都有不同的限制性措辞:

在翻译阶段6,由任何相邻字符序列和相同前缀的字符串文字标记指定的多字节字符序列被连接成单个多字节字符序列。 [...]

(C2011,6.4.5 / 5;加重)

当然,前缀字符串和前缀不是前缀相同的,对吗?

另一方面,该段继续,

[...]如果任何令牌具有编码前缀,则生成的多字节字符序列被视为具有相同的前缀; 否则,它被视为字符串文字。 是否可以连接具有不同前缀的宽字符串文字标记,如果是这样,处理所产生的多字节字符序列是由实现定义的。

其中的第一部分似乎正在谈论这个案例,但它似乎也依赖于首先执行的并置,而没有说明它必须被执行。 也许最后一部分是为了允许作为实现定义的行为,但它不太适合,因为虽然前缀和前缀不变的文字当然是“不同的前缀”,但它们不是两个都很宽。

当然,我所描述的这种级联似乎是要执行的,例如第6.4.5 / 9段中的例子。 但正如所有语言律师所知道的,这些例子是非规范性的。 是否有一种合理的方式来解释规范性文本以要求符合实现来执行此级联? 或者应该缺少相同的标准或许被认为是缺陷? 它是否执行定义是否执行这样的concourseations?


p2来自相同的子条款:

字符串文字是由双引号括起来的零个或多个多字节字符序列,如"xyz"

再次阅读报价,重点是我的:

在翻译阶段6,由任何相邻字符序列和相同前缀的字符串文字标记指定的多字节字符序列被连接成单个多字节字符序列。

您可以连接字符串文字标记和相邻的​​相同前缀的字符串文字标记。

(为了避免任何疑问,C中没有“字符文字”; 'c'是一个字符常量,参见§6.4.4.4。)

链接地址: http://www.djcxy.com/p/73297.html

上一篇: prefixed string literals concatenated with prefixed ones?

下一篇: Translate C program to other programming languages