C 语言(C11 及更新版本)中的
L'\x1234'
、'\u1234'
、u'\x1234'
和 L'\u1234'
有什么区别?
显然,带有前缀
L
的字符常量属于 wchar_t
类型,带有前缀 u
的常量属于 char16_t
类型。以 \x
开头的转义序列表示编译器的执行字符集 (ECS) 中给定代码的字符,以 \u
开头的转义序列表示 UTF-16 中给定代码的字符。
'\u1234'
的类型是什么(没有前缀L
)? L'\u1234'
的整数值是多少? UTF-16编码为0x1234的字符在ECS中的编码? u'\x1234'
表示的字符的UTF-16编码是0x1234还是取决于ECS?
是什么类型(没有前缀'\u1234'
)?L
'\u1234'
的类型是int
。如果 CHAR_MAX
大于或等于 0x1234 (4660),则 '\u1234'
的值为 0x1234 (4660)。否则,'\u1234'
的值是实现定义的。
的整数值是多少?L'\u1234'
L'\u1234'
的类型是wchar_t
。如果值 0x1234 (4660) 作为扩展字符集的成员存在,并且它表示源字符集中由通用字符名称 \u1234
指定的字符,则 L'\u1234'
的值为 0x1234 (4660)。否则 L'\u1234'
的值是实现定义的。
UTF-16编码为0x1234的字符在ECS中的编码?
0x1234 不是字符常量。是否存在表示与 UTF-16 代码 0x1234 相对应的字符的扩展执行字符集的单个成员、扩展执行字符集的多个成员的序列或不存在扩展执行字符集的成员序列实现定义的。
表示的字符的UTF-16编码是0x1234还是取决于ECS?u'\x1234'
u'\x1234'
的类型是char16_t
。 u'\x1234'
的值为 0x1234 (4660)。程序可以将值 0x1234 (4660) 解释为 UTF-16 代码单元值。