LCC: предварительная декларация Typedef'd Enum Failing? - PullRequest
4 голосов
/ 01 сентября 2011

Следующий фрагмент кода прекрасно компилируется в Mac OS X с gcc, но не компилируется в Windows с помощью lcc-win32:

typedef enum Foo Foo;

// Other code here

enum Foo { Bar = 1 };

И выдает эту ошибку:

неизвестное перечисление 'Foo'

В моем конкретном случае это не было проблемой.Я просто объединил утверждения в:

typedef enum Foo { Bar = 1 } Foo;

Но мне интересно, является ли LCC "более строгим" (придерживающимся некоторого стандарта) или "более тупым" (компилятор слишком туп, чтобы справиться с этимситуация).

Спасибо.

Также, пожалуйста, смотрите мой другой вопрос LCC: LCC: Инициализация структур, содержащих структуры?

1 Ответ

3 голосов
/ 01 сентября 2011

Предварительные объявления перечислений нестандартны (они нарушают пункт 3.7.2.3 раздела C99), и gcc также предупредит об этом, если вы добавите флаг -pedantic (который следует использовать при написании переносимого кода).

Причина этого заключается в том, что реализации могут свободно выбирать целочисленный тип, отличный от int, для использования при представлении перечисления (см. C99 раздел 6.7.2.2 §4). Однако, чтобы это работало, компилятор должен увидеть все значения, которые он должен представлять, прежде чем можно будет выбрать подходящий тип.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...