Определено ли перечисление в ANSI C? - PullRequest
1 голос
/ 14 июня 2011

Является ли гарантией, что state после этого кода будет LX_DONE?

enum lx_state { LX_START, LX_MIDDLE, LX_DONE };

enum lx_state state = LX_START;
++state;
++state;

Ответы [ 3 ]

4 голосов
/ 14 июня 2011

Да, стандарт С говорит в 6.7.2.2/3,

Каждый последующий перечислитель без = определяет его константу перечисления как значение выражения константы, полученного добавление 1 к значению предыдущей константы перечисления

2 голосов
/ 14 июня 2011

enum - это целое число, так что да, state будет равным LX_DONE, при условии, что вы избавитесь от странного двойного ++.

0 голосов
/ 14 июня 2011

Нет, но гарантируется, что код не скомпилируется.

enum lx_state { LX_START, LX_MIDDLE, LX_DONE };

int main() {
    enum lx_state state = LX_START;
    ++(++state);
}

дает:

e.c: In function 'main':
e.c:6:2: error: lvalue required as increment operand
...