3

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

wchar_t多字节函数(mblen, mbstowcs, mbtowc, wcstombs, wctomb)是 ANSI C 的一部分是否正确?

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

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

4

3 回答 3

3

该名称wchar_t在 C89(和 C99)标准中,但它不是语言支持的类型。它是一种typedef能够保存必要位数的整数类型。C89 7.1.6 [标准定义] 说:

wchar_t
是一个整数类型,其值范围可以表示支持的语言环境中指定的最大扩展字符集的所有成员的不同代码;空字符的代码值应为零,并且在 5.2.1 中定义的基本字符集的每个成员的代码值应等于其在用作整数字符常量中的唯一字符时的值。

这意味着wchar_t只要<stddef.h>没有被#included,某人可以在 C89 中定义为他们想要的任何东西。

在 C++ 中,这是非法的;wchar_t 是该语言中的关键字。


至于您引用的多字节函数,它们似乎是 C89 的一部分。第 7.10.7 节 [多字节字符函数] 定义了mblen, mbtowc,wctomb和 7.10.8 [多字节字符串函数] 定义了mbstowcs, 和wcstombs(都在 中<stdlib.h>)。当然请注意,因为 C89 没有这些功能constconst-qualified 版本不可用。

于 2013-04-15T17:25:07.800 回答
2

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

于 2013-04-15T17:14:02.887 回答
1

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

于 2013-04-15T17:17:54.667 回答