Компиляция в Cygwin:'EOF' не был объявлен в этой области, нормально компилируется в CentOS
Вопрос
Я сталкиваюсь с проблемами при компиляции приложений, привязанных к Linux, в Cygwin.
Эта ошибка:
error: ‘EOF’ was not declared in this scope
создается с помощью следующего фрагмента кода
if (option == EOF) break;
Компиляция этого в CentOS напрямую не приводит к ошибкам.
Это параметры g++, передаваемые файлом make:
-g -O0 -Wall -Wextra -std=gnu++11
Версия GCC на CentOS:
4.8.1 20130715
Версия GCC в Cygwin
4.8.2
Мне интересно, просто ли мне не хватает некоторых библиотек в Cygwin, или это просто ограничение Cygwin и оно не может быть устранено.
Решение
EOF
определяется в stdio.h
/ cstdio
.Скорее всего, происходит то, что вы не включаете ни один из этих заголовков, но являются включая, например, iostream
.Заголовкам стандартных библиотек разрешено вызывать включение других заголовков, а также некоторых реализаций' iostream
заголовки делают именно это, но не все.Вы не должны полагаться на это.Если вы используете EOF
, добавьте явное включение для соответствующего заголовка в свой собственный код.(Даже если это не ваш код, а в данном случае это не так, требуемые изменения в исходном коде те же самые.)