【问题标题】:Adjacent character and string literal tokens相邻字符和字符串文字标记
【发布时间】:2015-06-05 10:48:52
【问题描述】:

众所周知,在 C 中您可以编写 "a" "b" 并得到 "ab"。这在C11 标准中进行了讨论:

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

短语“字符和...”似乎暗示您可以通过编写'a' "b" 获得相同的结果,但我从未遇到过这种用法,GCC 和 Microsoft 编译器都拒绝它。我错过了什么吗?

【问题讨论】:

  • 我认为应该读作“字符串文字”,而不是“字符文字”。
  • 完整的段落是在翻译阶段6中,由任何相邻字符序列和相同前缀的字符串文字标记指定的多字节字符序列连接成单个多字节字符序列。如果任何标记具有编码前缀,则生成的多字节字符序列被视为具有相同的前缀;否则,它被视为字符串文字。是否可以连接不同前缀的宽字符串文字标记,如果可以连接,则对生成的多字节字符序列的处理由实现定义。 和..
  • 它也在 6.4.5 字符串文字部分下。所以很明显,标准指的是字符串文字,而不是字符文字。
  • 我相信它应该被解释为“任何相邻的字符串文字标记和相同前缀的字符串文字标记的序列。”这是一个非常令人困惑的收缩。

标签: c string char language-lawyer c11


【解决方案1】:

不,也许我们从那里的陈述中得到了错误的含义。

让我引用C11,第 5.1.1.2 章,翻译阶段,第 6 段,

  1. 连接相邻的字符串文字标记。

这里,charstring 字面量之间没有任何混淆,只是明确提到了 string 字面量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 2016-04-07
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多