Объявление переменной типа Enum в C

73
12

Я объявил этот тип перечисления в C:

enum months { JAN = 1, FEB, MAR, APR, MAY, JUN,
JUL, AUG, SEP, OCT, NOV, DEC } ;

Когда я пытаюсь создать переменную типа месяцев в main() с:

months month;

Это дает следующую ошибку:

неизвестный тип 'месяцев'

Но когда я заявляю это так:

enum months { JAN = 1, FEB, MAR, APR, MAY, JUN,
JUL, AUG, SEP, OCT, NOV, DEC } month;

Он работает нормально. Я думал, что оба пути действительны, так почему же возникает ошибка?

спросил(а) 2015-03-17T22:17:00+03:00 5 лет, 8 месяцев назад
1
Решение
71

Вам нужно обернуть typedef вокруг него, иначе вы можете получить к нему доступ, указав, что это enum.

Пример:

typedef enum { JAN = 1, FEB, MAR, APR, MAY, JUN,
JUL, AUG, SEP, OCT, NOV, DEC } months;
months month;

Или

enum months { JAN = 1, FEB, MAR, APR, MAY, JUN,
JUL, AUG, SEP, OCT, NOV, DEC };
enum months month;

ответил(а) 2015-03-17T22:18:00+03:00 5 лет, 8 месяцев назад
60

Вместо

months month;

вы должны написать

enum months month;

Другой способ - определить typedef для перечисления. Например

typedef enum months { JAN = 1, FEB, MAR, APR, MAY, JUN,
JUL, AUG, SEP, OCT, NOV, DEC } months;

и тогда вы можете написать

months month;

ответил(а) 2015-03-17T22:19:00+03:00 5 лет, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема