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