为什么fputwc()
,putwc()
和wchar_t
类型,而不是wint_t
的putwchar()
起飞的说法? 这违背相应非宽字符函数fputc()
,putc()
和putchar()
,内搭int
,不char
。不一致在glibc的fputwc(),putwc()和putwchar()的定义
2
A
回答
3
这是因为wchar_t
需要保存WEOF
值,并且char
不需要保存EOF
值。
对于char
,所述fputc()
,putc()
和putchar()
功能需要接受可在unsigned char
和EOF
范围,其中EOF
可以如此一个int
需要保持他们两个负数保持两个值的值。
而wchar_t
本身必须持有WEOF
字符以及作为最大的区域。 WEOF
表示适合于wchar_t
的值,但不与任何区域设置重叠。
这是因为char
和wchar_t
的名字变得更加混乱,你不应该看到wchar_t
作为char
但更多的int
其大小是不依赖于架构,但上规模最大的语言环境(以及WEOF
的值)。
Why putchar, toupper, tolower, etc. take a int instead of a char?
引用ISO/IEC 9899:201X 7.19.2:
WEOF
其扩展到类型的常量表达式wint_t
其价值doe不符合扩展字符集的任何成员。它被本子条款中的几个函数接受(并返回),以指示文件结束,即不再有来自 流的输入。 它也用作与扩展字符集的任何成员不相对应的宽字符值。
宏
WEOF
评估为类型wint_t
,其值是从扩展字符集的任何成员不同的一常量表达式。
wchar_t
类型,其值的范围可以表示不同的代码所支持的语言中所指定的最大扩展字符集的所有成员。在c++,
wchar_t
是一个不同的基本类型(因此它没有在<cwchar>
也没有定义任何其他头)。在c,这是一个整数类型的
typedef
。
相关问题
- 1. 为什么参数类型的`putwchar()`,`fputwc()`和`putwc()`不是`wint_t`?
- 2. glibc堆一致性检查
- 3. 不一致,在glibc的正则表达式(锚)
- 4. STL upper_bound定义不一致?
- 5. 属性过程的定义不一致 - 获取和设置VBA
- 6. 不一致的声明和定义用C
- 7. 为什么参数类型的`putchar()`,`fputc()`和`putc()`不是`char`?
- 8. glibc和non-glibc的mariadb tarball有什么不同?
- 9. 在glibc的
- 10. Javascript方法定义不一致
- 11. 自定义属性不一致?
- 12. 好的“一致性”的定义
- 13. Python:在您定义函数__setattr__的方式中不一致?
- 14. 目标特定的glibc ABI
- 15. glibc,glib和gnulib
- 16. 类定义中的“不一致的可访问性”
- 17. 访问未定义的值后,Nashorn中的输出不一致
- 18. 未定义图像中的点的不一致性
- 19. 在IPython和控制台中重定向sys.stderr的不一致性
- 20. 在Python中转义序列不一致
- 21. Solr中的自定义分数排序不会一致排序
- 22. Dust.js模板自定义助手在引导不一致行为
- 23. 自定义列表数据在Sharepoint 2010中显示不一致
- 24. 奇怪的错误消息“使用不一致的库定义”,在flowjs
- 25. glibc不支持Cygwin
- 26. 慢用于与不一致的定时
- 27. AngularJS不一致的数据绑定
- 28. WCF服务和不一致的访问
- 29. UIImage和UIScrollView的帧/边界不一致
- 30. Neo4j OEM和定制Cypher查询之间的SDN不一致
为什么在这个C代码中gcc没有发出警告? 'void f(char c){} void main(void){f((int)65);}'是不是有参数类型不匹配?为什么下面的代码不会发出警告? '... putwchar(getwchar()); ...'根据定义,'putwchar'的参数的类型是** wchar_t **,但是'getwchar'的返回值的类型是** wint_t **。再次 - 类型不匹配。为什么警告不是由编译器产生的? –
如果需要** wchar_t **来保存'WEOF'值,为什么** wint_t **存在? –
'WEOF'的确切值是什么?引用链接http://www.gnu.org/software/libc/manual/html_node/Extended-Char-Intro.html:“ISO 10646被设计为一个31位大代码空间”。所以根据你的回答'WEOF'必须占据一些有效的iso10646字符的地方。这与'EOF'相矛盾:它的值被选择为不与任何有效的8位字符重合。请解释为什么'WEOF'值取自有效的iso10646字符的范围。 –