通用字符名
C语言中通用字符名(universal character names)可用于标识符、字符常量和字符串字面量,用以表示非基本字符集(basic character set)中的字符。ISO/IEC 9899:2018标准第6.4.3 Universal character names节对C语言中通用字符名的语法、语义、使用限制等作了解释。C语言中通用字符名具有以下两种格式:
\uhhhh \Uhhhhhhhh
其中h为十六进制数字。如果前缀是小写字母u,后接4位十六进制数;如果前缀是大写字母U,后接8位十六进制数。通用字符名\uhhhh表示4位短标识符为hhhh的字符;通用字符名\Uhhhhhhhh表示8位短标识符为hhhhhhhh的字符。4位短标识符hhhh对应的8位短标识符为0000hhhh,所以通用字符名\uhhhh也可以写成\U0000hhhh形式。
注:ISO/IEC 10646标准为每个码点都定义了短标识符,不同码点对应不同短标识符。
通用字符名不能表示短标识符小于00A0(0024($)、0040(@)和0060(`)除外)的字符,也不能表示D800至DFFF范围内的字符。不能表示的字符是基本字符集中的字符和ISO/IEC 10646标准为控制字符、DELETE字符和S区域(保留供UTF-16使用)保留的代码位置。
通用字符名的应用(仅讨论通用字符名表示简体中文汉字的情况。)
1、用作标识符
通用字符名用作标识符时和普通字符一样,例如:
int \u6536\u5165 = 10000;
2、用作字符常量
通用字符名用作字符常量时应将其声明为宽字符类型,不能声明为多字节字符类型,例如:
wchar_t wc = L'\u7231'; char16_t wch = u'\u7231';
3、用作字符串字面量
通用字符名用作字符串字面量时既可以声明为宽字符类型,也可以声明为多字节字符类型,例如:
char *ptr = "\u4e2d\u56fd"; char *p = u8"\u4e2d\u56fd"; wchar_t *wp = L"\u4e2d\u56fd";
注:根据ISO/IEC 9899:2018标准第6.4.4.4 Character constants节和6.4.5 String literals节,u8前缀可以用于字符串字面量,表示UTF-8字符串字面量;但不可以用于字符常量。
通用字符名的输入与输出
通用字符名既可以使用字节函数输入或者输出,也可以使用宽字符函数输入或者输出。
范例一
|
|
范例二
|
|
上述两个程序均输出:
收入: 10000
爱
中国
注:分别使用Visual Studio、ideone编译。