C 标准定义EOF
and WEOF
使用以下语言:
7.21.1 输入/输出 - 简介
标题<stdio.h>
定义了多个宏,并声明了三种类型和许多函数来执行输入和输出。
...
EOF
它扩展为一个整数常量表达式,类型为 int 且为负值,由多个函数返回以指示文件结束,即不再有来自流的输入;
...
7.21.1 扩展多字节和宽字符实用程序 - 简介:
标题<wchar.h>
定义了四个宏,并声明了四种数据类型、一个标记和许多函数。
...
wint_t
这是一种默认情况下不变的整数类型参数升级可以保存与扩展字符集的成员相对应的任何值,以及至少一个不与扩展字符集的任何成员相对应的值
WEOF
它扩展为 wint_t 类型的常量表达式,其值不对应于扩展字符集的任何成员。(328) 本子条款中的几个函数接受(并返回)它以指示文件结束,即不再有来自流的输入。它还用作不对应于扩展字符集的任何成员的宽字符值。
- 宏 WEOF 的值可以与 EOF 的值不同,并且不必为负数。
EOF
是一个负值,并且它是唯一的负值getc()
可以返回。我看到它通常被定义为(-1)
,并且类似地WEOF
定义为((wint_t)-1)
.
是否有任何常见的 C 环境将这些宏定义为不同的内容?
标准委员会保留不同值的可能性,特别是非负值的理由是什么?WEOF
?
标准委员会保留不同值的可能性,特别是非负值的理由是什么?WEOF
?
int 类型总是有符号的,负值总是包含在范围内,因此EOF
标准可以将宏定义为-1。
However the type wint_t
may be signed or unsigned1, so the macro WEOF
cannot be defined by the standard as a specific value. The implementation must choose it, since the implementation defines the type wint_t
and its signess, it must also choose a value for WEOF
.
1 (Quoted from: ISO/IEC 9899:201x 7.20.3 Limits of other integer types 5)
If wint_t
(see 7.29) is defined as a signed integer type, the value of WINT_MIN
shall be no greater than −32767 and the value of WINT_MAX
shall be no less than 32767; otherwise, wint_t
is defined as an unsigned integer type, and the value of WINT_MIN
shall be 0 and the value of WINT_MAX
shall be no less than 65535.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)