为什么fputwc()
,putwc()
和putwchar()
采用wchar_t
类型而不是wint_t
的参数?
这与相应的非宽字符函数fputc()
,putc()
和putchar()
,相矛盾,它们采用int
,而非char
。
答案 0 :(得分:3)
这是因为wchar_t
需要保留WEOF
值,而char
不需要保留EOF
值。
对于char
,fputc()
,putc()
和putchar()
函数需要接受可以包含unsigned char
和<中的两个值的值/ em> EOF
范围,其中EOF
可以是负数,因此需要int
来保存它们。 1
而wchar_t
本身需要将WEOF
字符以及作为最大的区域设置。 2 WEOF
代表一个值适合wchar_t
但不与任何区域设置重叠。 3
由于char
和wchar_t
的名称,这更令人困惑,您不应该将wchar_t
视为char
,而应将int
更多视为WEOF
哪个大小不依赖于体系结构,而是依赖于最大区域设置的大小(以及WEOF
的值)。 4
1 Why putchar, toupper, tolower, etc. take a int instead of a char?
2 引用 ISO / IEC 9899:201x 7.19.2:
wint_t
它扩展为类型的常量表达式WEOF
,其值与扩展字符集的任何成员都不对应。它被本子条款中的几个函数接受(并返回)以指示文件结尾,即不再有来自 流。 它也用作宽字符值,与扩展字符集的任何成员都不对应。
宏
wint_t
求值为wchar_t
类型的常量表达式,其值与扩展字符集的任何成员不同。
wchar_t
其值的范围可以表示支持的语言环境中指定的最大扩展字符集的所有成员的不同代码。在c++中,
<cwchar>
是一种独特的基本类型(因此未在typedef
中定义,也未在任何其他标题中定义。)在c中,这是整数类型的
public class LinkHandler { static Node hoverNode; }
。