wchar_t和多字节函数是ANSI C的一部分吗?

时间:2013-04-15 17:12:42

标签: c ansi wchar-t c89

C99C11支持wchar_t和多字节功能。但我不确定ANSI C(1989)。

wchar_t和多字节函数(mblenmbstowcsmbtowcwcstombswctomb)是ANSI的一部分是否正确? C 1

我没有在Kernighan和Ritchie的书中找到这些函数(C编程语言(第2版))。

http://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628

3 个答案:

答案 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节[多字节字符函数]定义mblenmbtowcwctomb和7.10.8 [多字节字符串函数]定义mbstowcswcstombs (全部在<stdlib.h>)。请注意,因为C89没有const这些函数的const - 限定版本不可用。

答案 1 :(得分:2)

wchar_t是ANSI C(1989)的一部分。

答案 2 :(得分:1)

wchar_t完全符合C89标准。在我的版本中,wchar_t在Kernighan和Ritchie一书的第A2.5.2节中提到过。