一个具有sizeof(int)== 1“完全符合”的实现?

参见英文答案 > Can sizeof(int) ever be 1 on a hosted implementation?8个
根据 the C standard,fgetc返回的任何字符以unsigned char值的形式返回,“转换为int”(该引号来自C标准,表示确实有一个转换).

当sizeof(int)== 1时,许多unsigned char值超出范围.因此,这些无符号字符值中的一些可能最终被转换为EOF的int值(转换结果为“implementation-defined or an implementation-defined signal is raised”),尽管该文件实际上不是错误的或最终的,文件状态.

我很惊讶地发现这样的实现实际上存在. TMS320C55x CCS manual文档UCHAR_MAX具有对应的值65535,INT_MAX具有32767,fputs和fopen支持二进制模式…更令人惊讶的是,它似乎将环境描述为完全符合,完整的实现(负信号).

The C55x C/C++ compiler fully conforms to the ISO C standard as defined by the ISO specification …

The compiler tools come with a complete runtime library. All library
functions conform to the ISO C library standard. …

这样的一个实现可以返回一个值,表示没有,真的完全符合的错误?这可以证明在循环的条件部分使用feof和ferror(像看起来那样可怕)吗?例如,while((c = fgetc(stdin))!= EOF ||!(feof(stdin)|| ferror(stdin))){…}

解决方法

函数fgetc()仅在读取正确字符时返回unsigned char范围内的int值,否则返回为int类型的负值的EOF.

我的原始答案(我改变了它)假设有一个整数转换为int,但事实并非如此,因为实际上函数fgetc()已经返回int类型的值.

我认为,要符合,实现必须使fgetc()返回int的范围内的非负值,除非返回EOF.

以这种方式,从32768到65535的值的范围将永远不会与TMS320C55x实现中的字符代码相关联.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...