字符串常量的宽度前缀
Width prefixes to string constants
最新版本的 C 标准规定了字符串常量的宽度前缀,例如u8"a"
是单个预处理令牌。
是否获得一个或两个预处理令牌取决于前缀中的确切字母?例如。 u9"a"
是否仍然是两个预处理标记?
C11 在 6.4
中指定字符串文字是预处理标记之一:
preprocessing-token:
header-name
identifier
pp-number
character-constant
string-literal
punctuator
each non-white-space character that cannot be one of the above
因此 u8"a"
是单个标记,因为字符串文字部分 6.4.5
将其列为有效选项:
string-literal:
encoding-prefix(opt) " s-char-sequence(opt) "
encoding-prefix:
u8
u
U
L
序列 u9"a"
不是 字符串文字,因为 u9
不是有效前缀之一。
u9
将(根据我的阅读)被视为标识符,而 "a"
将是一个字符串文字,因此这将是两个单独的预处理标记。
最新版本的 C 标准规定了字符串常量的宽度前缀,例如u8"a"
是单个预处理令牌。
是否获得一个或两个预处理令牌取决于前缀中的确切字母?例如。 u9"a"
是否仍然是两个预处理标记?
C11 在 6.4
中指定字符串文字是预处理标记之一:
preprocessing-token:
header-name
identifier
pp-number
character-constant
string-literal
punctuator
each non-white-space character that cannot be one of the above
因此 u8"a"
是单个标记,因为字符串文字部分 6.4.5
将其列为有效选项:
string-literal:
encoding-prefix(opt) " s-char-sequence(opt) "
encoding-prefix:
u8
u
U
L
序列 u9"a"
不是 字符串文字,因为 u9
不是有效前缀之一。
u9
将(根据我的阅读)被视为标识符,而 "a"
将是一个字符串文字,因此这将是两个单独的预处理标记。