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

前端之家收集整理的这篇文章主要介绍了一个具有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&C++相关文章