首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有共同的C环境,其中EOF != -1或WEOF != -1

是否有共同的C环境,其中EOF != -1或WEOF != -1
EN

Stack Overflow用户
提问于 2016-11-21 10:08:28
回答 2查看 276关注 0票数 2

C标准使用以下语言定义了EOFWEOF

7.21.1输入/输出-介绍 header <stdio.h>定义了几个宏,并声明了执行输入和输出的三种类型和多个函数。 ..。 EOF 它扩展为一个整数常量表达式,带有int类型和一个负值,由几个函数返回,以指示文件结束,即不再从流输入; . 7.21.1扩展的多字节和宽字符实用程序 -导言: header <wchar.h>定义了四个宏,并声明了四种数据类型、一个标记和许多函数。 ..。 wint_t 它是默认情况下不变的整数类型参数升级,可以保存与扩展字符集成员对应的任何值,以及至少一个与扩展字符集的任何成员不对应的值。 WEOF 它扩展为wint_t类型的常量表达式,其值不对应于扩展字符集的任何成员。(328)该值由该子子句中的几个函数接受(并返回),以指示文件结束,即不再来自流的输入。它还用作不对应于扩展字符集的任何成员的宽字符值。

  1. 宏WEOF的值可能与EOF不同,不一定为负值。

EOF是一个负值,它是getc()可以返回的唯一负值。我看到它通常被定义为(-1),类似的WEOF定义为((wint_t)-1)

是否有任何共同的C环境,其中任何一个宏被定义为不同的东西?

标准委员会保留不同价值的可能性,特别是WEOF的非负价值的理由是什么?

EN

回答 2

Stack Overflow用户

发布于 2016-11-21 11:14:51

EOF的值-1允许简单高效地实现ctype宏(对于小char的常见情况,例如8位左右)。典型的实现可能如下所示:

代码语言:javascript
复制
unsigned __ctypes[257] = { 0 /* for EOF */, ... };

#define isalpha(c) (__ctypes[(c)+1] & _ALPHA_BITS)

将EOF定义为任何其他整数并没有什么特别的好处,因此在任何具有小char类型的合理实现中都可能使用so -1。

对于大型wchar_t,表太大,因此wctype函数可能会以不同的方式实现。因此,不鼓励给予WEOF任何特定的价值,包括-1。

票数 3
EN

Stack Overflow用户

发布于 2020-09-03 15:02:15

在Xinu中-2。请参阅Actual implementation of EOF different from -1

OTOH wint_t 可以是一个无符号类型的,因此有许多实际的WEOF != -1实现。例如,在MSVC中,wint_tunsigned shortWEOF(wint_t)(0xFFFF)。从技术上讲,U+FFFF isn't a valid Unicode character可以用于WEOF,就像-1sizeof(char) == sizeof(int)实现中用于EOF一样。另请参阅

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40717563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档