C 真的需要两个单引号(撇号)来分隔字符文字而不是一个?
对于字符串文字,我们确实需要分隔开头和结尾,因为字符串的长度不同,但在我看来,我们确实知道 char 文字的长度:单个字符(在源中),如果是两个字符是常规字符转义(前缀\0),如果是八进制文字(前缀\0[0-7]),则为五个字符,等等。
请记住,我正在寻找技术答案,而不是历史答案。它使解析更简单吗?它是否使 70 年代硬件上的解析更简单?它是否允许更好地解析错误消息?像这样的东西。
(大多数受 C 语法启发的语言可能会问同样的问题,因为它们中的大多数似乎使用相同的语法来分隔字符文字。我认为 Jai 编程语言可能是一个例外,因为我似乎记得它只使用了一个问题标记(在开始时),但我不确定。)
一些例子:
'G''\0''\0723'如果我们只在标记的开头使用单引号,它会起作用吗?
'G'\0'\0723原则上,我们能否在不使语法复杂化的情况下以相同的方式解析这些标记?
我们看到空字节文字和八进制文字具有相同的前缀,但可能没有任何歧义,因为可能没有任何方式'\0紧随其后723可能不是字符文字(至少在我看来)。如果存在歧义,则可以\z改为空字节文字。
是否需要两个单引号才能正确解析字符文字?
cppreference.com 说多字符常量已经从 B 编程语言继承到 C,所以可能从一开始就存在。由于它们可以具有不同的宽度,因此结尾引用几乎是必需的。
除了这一点和一般的美学之外,特别是代表空格字符的字符常量看起来有些尴尬,如果它只是' 代替' '.