Как использовать перечисление в 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

Вы не можете инициализировать типы данных внутри структуры, так как при определении структур не выделяется пространство памяти.