C也支持通用字符名来使用扩展字符集,使用通用字符名,你可以指定任何扩展字符,它的Unicode值如下形式:
/uXXXX
或者:
/UXXXXXXXX
其中,XXXX或XXXXXXXX为16进制的Unicode指针符号,使用小写字母u做为前缀,后面为四个十六进制数字,或者大写字母U,后面为8个十六进制数字. 如果前四个十六进制数字为0,则也可以写作/uXXXX或者/U0000XXXX。
通用字符名可以用来表示标识符、字符常量、字符串,但是,不能用来表示基本字符集中的字符。
当你使用通用字符名来表示一个字符,编译器将它存储在字符集中,以便执行时使用。例如,如果执行时字符集在一个本地化程序中是ISO 8859-7 (8-bit Greek),则下面的的变量alpha使用/xE1初始化。
Char alpha = ‘/u03B1’
然而如果执行时字符集为UTF-16,需要定义一个宽字符变量:
Wchar_t alpha = ‘/u03b1’
在这种情况下,alpha的值为十六进制3B1,与通用字符名相同。
注:不是所用编译器都支持通用字符名
C为标点符号提供了一种可选择的表示,因为标点符号并不是所有键盘上均可用,6个两字节,或2个字符记号,如下Table 1-1.
Table 1-1 两字母词
两字母词 |
等价表示 |
<: |
[ |
:> |
] |
<% |
{ |
%> |
} |
%; |
# |
%;%; |
## |
如果这些序列出现在字符常量或字符串中,它们将不被认为是两字母词,在其他位置,它们的行为的确与单字符符号相同,例如,下面的代码段完全有等价,产生相同的输出。
两字母:
非两字母:
输出:
C也提供三字母词,即使用三个字符表示,它们均以两个问号开始,第三个字符决定三字母词所表示的标点符号,见Table 1-2.
Table 1-2.三字母词
??( |
[ |
??) |
] |
??< |
{ |
??> |
} |
??= |
# |
??/ |
/ |
??! |
| |
??’ |
^ |
??- |
~ |
三字母词允许仅使用ISO/IEC 646中定义的字符来写任何C语言程序,1991年的标准符合7位的ASCII,在编译的第一阶段,预编译器使用三个单独的等价字符替换三字母词。这也是就是说,不同与两字母词,三字母词在任何时候均可以被三个等价的单字符替代,包括中字符常量、字符串、注释和预处理语句中,例如,预处理器解释以下三字母词:
预处理器的输出如下:
如果你想使用三个字符中的一个,而不想被解释为三字母词,可以按以下方式书写: