最新版本的C标准为字符串常量提供了宽度前缀,例如u8"a"
是一个预处理令牌。
您是否获得一个或两个预处理令牌取决于前缀中的确切字母?例如。是u9"a"
仍然是两个预处理令牌的情况吗?
答案 0 :(得分:4)
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"
将是字符串文字,因此这将是两个单独的预处理标记。