Является ли гарантией, что state после этого кода будет LX_DONE?
state
LX_DONE
enum lx_state { LX_START, LX_MIDDLE, LX_DONE }; enum lx_state state = LX_START; ++state; ++state;
Да, стандарт С говорит в 6.7.2.2/3,
Каждый последующий перечислитель без = определяет его константу перечисления как значение выражения константы, полученного добавление 1 к значению предыдущей константы перечисления
enum - это целое число, так что да, state будет равным LX_DONE, при условии, что вы избавитесь от странного двойного ++.
enum
++
Нет, но гарантируется, что код не скомпилируется.
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