C - предварительная декларация перечислений? - PullRequest
11 голосов
/ 20 сентября 2011

Форвардное объявление перечислений в C не работает для меня.Я искал в интернете и stackoverflow, но все вопросы, касающиеся предварительных объявлений перечислителей, относятся к c ++.Что вы делаете для объявления перечислителей в C?Разместите их в верхней части каждого файла (или во включении), чтобы все функции в файле могли получить к ним доступ?Спасибо

Ответы [ 2 ]

8 голосов
/ 20 сентября 2011

Поместите их в заголовок, чтобы все файлы, которым они нужны, могли получить доступ к заголовку и использовать объявления из него.

При компиляции с параметрами:

$ /usr/bin/gcc -g -std=c99 -Wall -Wextra -c enum.c
$

GCC 4.2.1 (в MacOS X 10.7.1) принимает следующий код:

enum xyz;

struct qqq { enum xyz *p; };

enum xyz { abc, def, ghi, jkl };

Добавить -pedantic и предупреждает:

$ /usr/bin/gcc -g -std=c99 -Wall -Wextra -pedantic -c enum.c
enum.c:1: warning: ISO C forbids forward references to ‘enum’ types
enum.c:5: warning: ISO C forbids forward references to ‘enum’ types
$

Таким образом, вы не должны пытаться использовать предварительные объявления перечислимых типов в C; GCC допускает это как расширение, когда не вынужден быть педантичным.

4 голосов
/ 20 сентября 2011

Вы не можете "перечислить вперед" перечисления, потому что компилятор не будет знать размер перечисления. Стандарт C гласит: «Каждый перечисляемый тип должен быть совместим с char, целочисленным типом со знаком или целочисленным типом без знака. Выбор типа определяется реализацией, но должен быть способен представлять значения всех членов перечисление".

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