字符串常量的宽度前缀

时间:2015-06-04 03:35:17

标签: c c-preprocessor c11

最新版本的C标准为字符串常量提供了宽度前缀,例如u8"a"是一个预处理令牌。

您是否获得一个或两个预处理令牌取决于前缀中的确切字母?例如。是u9"a"仍然是两个预处理令牌的情况吗?

1 个答案:

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