EOF всегда == EOF
. Больше ничего не предполагай.
При втором чтении стандарта (и, как и некоторых других комментариев здесь), кажется, что EOF всегда отрицателен - и для использования, указанного в этом вопросе (номер строки или EOF), это будет работать. Что я хотел предупредить (и до сих пор делаю), так это предположить, что символы положительные, а EOF - отрицательные.
Помните, что стандартная реализация C может иметь отрицательные символьные значения - это даже упоминается в «Языке программирования C» (K & R). Печать символов всегда положительна, но на некоторых архитектурах (вероятно, все древние) управляющие символы отрицательны. Стандарт C не указывает, является ли тип char
подписанным или неподписанным, и единственная символьная константа, гарантированно имеющая одинаковое значение для разных платформ, - это '\0'
.