标准字符串文字和字符串文字?

时间:2017-03-07 04:14:46

标签: c string constants string-literals

我对这四个术语感到困惑:

  • 字符串文字

  • 字符常量

  • 字符串文字。

  • 多字节字符序列

C Standard中阅读此引文:

  

字符串文字不必是字符串(见7.1.1),因为   <{1}}转义序列可以在其中嵌入空字符。

第一部分是什么意思?

1 个答案:

答案 0 :(得分:3)

string-literal

  • 字符串文字,例如"abc";
  • UTF-8字符串文字,例如u8"abc";
  • 宽字符串文字,例如L"abc"

从标准(强调我的):

  

字符串文字是一个包含零个或多个多字节字符的序列   双引号,如"xyz"中所示。 UTF-8字符串文字是相同的,除了以u8为前缀。   宽字符串文字是相同的,除了前缀为字母LuU
....
  在转换阶段7中,将值为零的字节或代码附加到每个多字节   由字符串文字或文字产生的字符序列。 78)

     

78)字符串文字不必是字符串(见7.1.1),因为空字符可能嵌入其中   \ 0转义序列。

  

string 是一个连续的字符序列,由 终止并包含   字符

因此,字符串文字也可以在中间甚至在开头\0,例如"a\0b""\0ab"。我认为这就是脚注所说的内容。

字符常量是单引号中的 c-char-sequence (通常是单个字符),可能的前缀为L / {{1 }} / u

  

整数字符常量是包含的一个或多个多字节字符的序列   在单引号中,如U中所示。除了前缀之外,宽字符常量是相同的   字母'x'Lu

因此术语不是非常对称,IMO。例如。宽字符常量是字符常量的特定情况。但是,字符串文字和宽字符串文字都属于字符串文字。