问题描述
|
是否可以保证此代码后的“ 0”为“ 1”?
enum lx_state { LX_START,LX_MIDDLE,LX_DONE };
enum lx_state state = LX_START;
++state;
++state;
解决方法
是的,C标准在6.7.2.2/3中说,
每个后续的枚举数,不含=
将其枚举常量定义为通过以下方式获得的常量表达式的值
将1加上上一个枚举常量的值
,
enum
是一个整数,所以是的,假设您摆脱了怪异的双++
,state
将是LX_DONE
。
, 不,但是可以保证代码不会被编译。
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