Как использовать перечисление в C
В основном мы должны реализовать очередь (связанный список) для очереди ожидания ресторана.
Мы получаем дополнительные баллы за использование enum
, но я никогда не использовал его раньше. Мне интересно, как это выглядит правильно, как я его использую? Я просмотрел его, но не видел примеров с использованием связанных списков.
Вот инструкции для нашей структуры:
При написании кода вы ДОЛЖНЫ создать структуру C для узлов в связанном списке списка ожидания. Эти элементы данных должны включать следующее (и могут включать другие, если необходимо).
-
имя группы
-
целочисленная переменная, определяющая размер группы (количество людей в группе)
-
статус в ресторане (дополнительные баллы за использование перечисления!)
-
указатель на следующий node в списке
Состояние ресторана - это вход или вход (вызов досрочно, чтобы поместить имя в список ожидания)
Здесь моя структура:
typedef struct restaurant
{
char name[30];
int groupSize;
enum status{call, wait};
struct restaurant *nextNode;
}list;
Я спрашиваю, потому что я получаю это предупреждение, когда компилирую:
lab6.c:11:28: warning: declaration does not declare anything [enabled by default]
Ответы
Ответ 1
В вашей структуре typedef в основном говорится: "Если бы у меня было поле" status "в моей записи, оно могло бы иметь значение" call "или значение" wait ". Предупреждение в основном говорит" вы никогда не выделяли поле ".
Возможное изменение:
enum status {CALL, WAIT};
typedef struct restaurant
{
char name[30];
int groupSize;
enum status my_status;
struct restaurant *nextNode;
}list;
Здесь больше информации:
Ответ 2
Ваш enum
должен быть объявлен вне структуры:
enum Status {call, wait};
typedef struct restaurant
{
char name[30];
int groupSize;
struct restaurant *nextNode;
} list;
или должен объявить член этого типа внутри структуры:
typedef struct restaurant
{
char name[30];
int groupSize;
enum Status {call, wait} status;
struct restaurant *nextNode;
} list;
или оба:
enum Status {call, wait};
typedef struct restaurant
{
char name[30];
int groupSize;
enum Status status;
struct restaurant *nextNode;
} list;
Вы также можете создать typedef для enum Status
. А поскольку теги (например, Status
in enum Status
) находятся в другом пространстве имен из элементов структуры, вы можете фактически использовать:
enum status {call, wait} status;
и компилятор не будет запутан, но вы вполне можете быть.
Очень часто люди записывают константы перечисления в ALL_CAPS. Это отчасти похмелье со дней использования #define WAIT 0
и #define CALL 1
вместо enum Status { WAIT, CALL };
.
Ответ 3
Вы не можете инициализировать типы данных внутри структуры, так как при определении структур не выделяется пространство памяти.