我对这四个术语感到困惑:
字符串文字
字符常量
字符串文字。
多字节字符序列
在C Standard中阅读此引文:
字符串文字不必是字符串(见7.1.1),因为 <{1}}转义序列可以在其中嵌入空字符。
第一部分是什么意思?
答案 0 :(得分:3)
string-literal 是
"abc"
; u8"abc"
; L"abc"
。从标准(强调我的):
字符串文字是一个包含零个或多个多字节字符的序列 双引号,如
"xyz"
中所示。 UTF-8字符串文字是相同的,除了以u8为前缀。 宽字符串文字是相同的,除了前缀为字母L
,u
或U
。
....
在转换阶段7中,将值为零的字节或代码附加到每个多字节 由字符串文字或文字产生的字符序列。 78)78)字符串文字不必是字符串(见7.1.1),因为空字符可能嵌入其中 \ 0转义序列。
string 是一个连续的字符序列,由 终止并包含 字符 强>
因此,字符串文字也可以在中间甚至在开头\0
,例如"a\0b"
或"\0ab"
。我认为这就是脚注所说的内容。
字符常量是单引号中的 c-char-sequence (通常是单个字符),可能的前缀为L
/ {{1 }} / u
。
整数字符常量是包含的一个或多个多字节字符的序列 在单引号中,如
U
中所示。除了前缀之外,宽字符常量是相同的 字母'x'
,L
或u
。
因此术语不是非常对称,IMO。例如。宽字符常量是字符常量的特定情况。但是,字符串文字和宽字符串文字都属于字符串文字。