C标准使用以下语言定义EOF
和WEOF
:
7.21.1输入/输出 – 简介
头文件
定义了几个宏,并声明了三种类型和许多用于执行输入和输出的函数。
…
EOF
它扩展为一个整数常量表达式,类型为int,负值,由几个函数返回,表示文件结束,即不再有来自流的输入;
…
7.21.1扩展的多字节和宽字符实用程序 – 简介:
头文件
定义了四个宏,并声明了四种数据类型,一个标记和许多函数。
…
wint_t
这是一个整数类型,默认情况下,参数提升不变,可以保存与扩展字符集成员对应的任何值,以及至少一个与扩展字符集的任何成员不对应的值
WEOF
扩展为类型为wint_t的常量表达式,其值与扩展字符集的任何成员都不对应。(328)本子条款中的若干函数接受(并返回)它以指示文件结束,即,没有来自流的输入。 它还用作宽字符值,与扩展字符集的任何成员都不对应。
328)宏观WEOF的值可能与EOF的值不同,不必为负值。
EOF
是一个负值,它是getc()
可以返回的唯一负值。 我已经看到它通常定义为(-1)
,同样WEOF
定义为((wint_t)-1)
。
是否有任何常见的C环境,其中这些宏中的任何一个被定义为不同的东西?
标准委员会有什么理由留下不同价值的可能性,特别是对WEOF
的非负价值?
标准委员会有什么理由留下不同价值的可能性,特别是对WEOF的非负价值?
int类型始终是有符号的,负值始终包含在范围内,因此EOF宏可以由标准定义为-1。
但是,类型wint_t可以是有符号或无符号1 ,因此宏WEOF不能被标准定义为特定值。 实现必须选择它,因为实现定义了类型wint_t及其签名,所以它还必须为WEOF选择一个值。
1 (引用自:ISO / IEC 9899:201x 7.20.3其他整数类型的限制5)
如果将wint_t(见7.29)定义为有符号整数类型,则WINT_MIN的值不应大于-32767,WINT_MAX的值不应小于32767; 否则,wint_t被定义为无符号整数类型,WINT_MIN的值应为0,WINT_MAX的值应不小于65535。
EOF
的值为-1允许简单有效地实现ctype
宏(对于小char
的常见情况,比如8位左右)。 典型的实现可能如下所示:
unsigned __ctypes[257] = { 0 /* for EOF */, ... }; #define isalpha(c) (__ctypes[(c)+1] & _ALPHA_BITS)
将EOF定义为任何其他整数没有特别的好处,因此-1可能用于具有小char
类型的任何合理实现中。
对于大型wchar_t
,该表太大,因此wctype函数可能以不同方式实现。 因此,给予WEOF任何特定价值的动力较小,包括-1。
以上就是c/c++开发分享是否存在EOF!= -1或WEOF!= -1的常见C环境相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/549656.html