Oracle® Solaris Studio 12.4:C 用户指南

退出打印视图

更新时间: 2014 年 12 月
 
 

6.6.4 C 语言特征

为了给亚洲语言环境中的程序员带来更大的灵活性,ISO C 提供了宽字符常量和宽文本字符串。它们具有与其非宽版本相同的形式,但位置是紧邻字母 L 之后:

  • 'x' 常规字符常量

  • ¥’ 常规字符常量

  • L'x' 宽字符常量

  • L'¥' 宽字符常量

  • "abc¥xyz" 常规文本字符串

  • L"abcxyz" 宽文本字符串

在常规版本和宽版本中,多字节字符均有效。生成表意字符 ¥ 所必需的字节序列与编码有关,但是如果它由多个字节组成,则字符常量 ’¥’ 的值是实现定义的,正如 ’ab’ 的值是实现定义的一样。除了换码序列之外,常规文本字符串包含引号之间指定的字节,包括每个指定的多字节字符的字节。

当编译系统遇到宽字符常量或宽文本字符串时,每个多字节字符都将转换为宽字符,如同调用了 mbtowc() 函数一样。因此,L'¥' 的类型为 wchar_tabc¥xyz 的类型为八位数组 wchar_t。正如常规文本字符串那样,每个宽文本字符串都附加有额外的零值元素,但是在这些情况下,它是值为零的 wchar_t

正如常规文本字符串可用作字符数组初始化的快捷方法,宽文本字符串可用于初始化 wchar_t 数组:

wchar_t *wp = L"a¥z";
wchar_t x[] = L"a¥z";
wchar_t y[] = {L’a’, L’¥’, L’z’, 0};
wchar_t z[] = {’a’, L’¥’, ’z’, ’\0’};

在此示例中,xyz 这三个数组以及 wp 指向的数组具有相同长度。所有数组均使用相同的值进行初始化。

最后,正如常规文本字符串一样,串联相邻宽文本字符串。但是,对于 1990 ISO/IEC C 标准,相邻常规文本字符串和宽文本字符串会产生不确定的行为。此外,1990 ISO/IEC C 标准指定,如果编译器不接受这种串联,不必生成错误。