Sun Studio 12:C 用户指南

6.7.5 C 语言特征

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

在常规版本和宽版本中,多字节字符均有效。生成表意字符 ¥ 所必需的字节序列与编码有关,但是如果它由多个字节组成,则字符常量 '¥' 的值是实现定义的,正如 '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 标准指定,如果编译器不接受这样的并置,则不需要使用编译器来产生错误。