为什么C使用两个单引号来分隔字符文字而不是一个?

C 真的需要两个单引号(撇号)来分隔字符文字而不是一个?

对于字符串文字,我们确实需要分隔开头和结尾,因为字符串的长度不同,但在我看来,我们确实知道 char 文字的长度:单个字符(在源中),如果是两个字符是常规字符转义(前缀),如果是八进制文字(前缀[0-7]),则为五个字符,等等。

请记住,我正在寻找技术答案,而不是历史答案。它使解析更简单吗?它是否使 70 年代硬件上的解析更简单?它是否允许更好地解析错误消息?像这样的东西。

(大多数受 C 语法启发的语言可能会问同样的问题,因为它们中的大多数似乎使用相同的语法来分隔字符文字。我认为 Jai 编程语言可能是一个例外,因为我似乎记得它只使用了一个问题标记(在开始时),但我不确定。)

一些例子:

  • 'G'
  • ''
  • '723'

如果我们只在标记的开头使用单引号,它会起作用吗?

  • 'G
  • '
  • '723

原则上,我们能否在不使语法复杂化的情况下以相同的方式解析这些标记?

我们看到空字节文字和八进制文字具有相同的前缀,但可能没有任何歧义,因为可能没有任何方式'紧随其后723可能不是字符文字(至少在我看来)。如果存在歧义,则可以z改为空字节文字。

是否需要两个单引号才能正确解析字符文字?

回答

cppreference.com 说多字符常量已经从 B 编程语言继承到 C,所以可能从一开始就存在。由于它们可以具有不同的宽度,因此结尾引用几乎是必需的。

除了这一点和一般的美学之外,特别是代表空格字符的字符常量看起来有些尴尬,如果它只是' 代替' '.


以上是为什么C使用两个单引号来分隔字符文字而不是一个?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>