C99
和C11
支持wchar_t
和多字节功能。但我不确定ANSI C
(1989)。
wchar_t
和多字节函数(mblen
,mbstowcs
,mbtowc
,wcstombs
,wctomb
)是ANSI的一部分是否正确? C 1
我没有在Kernighan和Ritchie的书中找到这些函数(C编程语言(第2版))。
http://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
答案 0 :(得分:3)
名称wchar_t
在C89(和C99)标准中,但它不是语言支持的类型。对于某种能够保持必要位数的整数类型,它是typedef
。 C89 7.1.6 [标准定义]说:
wchar_t的
这是一个整数类型,其值范围可以 代表最大扩展的所有成员的不同代码 在受支持的语言环境中指定的字符集; null 字符的代码值应为零,并且每个成员都是基本的 5.2.1中定义的字符集应具有与其相等的代码值 用作整数字符中的单个字符时的值 恒定。
这意味着,只要wchar_t
没有<stddef.h>
d,有人就可以将#include
定义为他们想要的任何内容。
在C ++中,这是非法的; wchar_t是该语言的关键字。
对于您引用的多字节函数,它们似乎是C89的一部分。第7.10.7节[多字节字符函数]定义mblen
,mbtowc
,wctomb
和7.10.8 [多字节字符串函数]定义mbstowcs
和wcstombs
(全部在<stdlib.h>
)。请注意,因为C89没有const
这些函数的const
- 限定版本不可用。
答案 1 :(得分:2)
wchar_t
是ANSI C(1989)的一部分。
答案 2 :(得分:1)
wchar_t
完全符合C89标准。在我的版本中,wchar_t
在Kernighan和Ritchie一书的第A2.5.2节中提到过。