字符串常量的宽度前缀

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" 将是一个字符串文字,因此这将是两个单独的预处理标记。