https://en.wikibooks.org/wiki/C_Programming/stdio.h
Разбирается в викиучебнике (емнип, вроде вообще из K&R взято, но под рукой его нет) ввод/вывод из файла и отмечается, что просто проверки на EOF может оказаться не достаточно в таких ситуациях
On systems where int and char are the same size (i.e., systems incompatible with minimally the POSIX and C99 standards), even the «good» example will suffer from the indistinguishability of EOF and some character's value. The proper way to handle this situation is to check feof and ferror after getchar returns EOF. If feof indicates that end-of-file has not been reached, and ferror indicates that no errors have occurred, then the EOF returned by getchar can be assumed to represent an actual character. These extra checks are rarely done, because most programmers assume that their code will never need to run on one of these «big char» systems. Another way is to use a compile-time assertion to make sure that UINT_MAX > UCHAR_MAX, which at least prevents a program with such an assumption from compiling in such a system.
Стало интересно, где такое вообще бывает? Это рудимент из 70-х (тоже интересно, где было) или на каких-то системах всё же такое возможно. Вообще есть хотя бы небольшой смысл в совремённых программах закладываться на подобное или можно смело игнорировать. Мне кажется, что можно игнорировать, но все же, вдруг например в embedded такое реально встречается или в каких-то ОС, не самых неизвестных.