枚举在C替换中是否类似于#define
例如,如果我有一个标志列表,比如:

enum{
 STATE_0 = 0x1<<0,
 STATE_1 = 0x1<<1,
 STATE_2 = 0x1<<2,
 STATE_3 = 0x1<<3,
 .
 .
 .
}

编译代码时,值将具有语句的计算结果,或使用#define这样的精确语句。
例如,状态2将被评估为40x1<<2
注:混淆的原因是,如果编译器优化被禁用,我所看到的enumvs#define问题状态的答案中没有一个是枚举比#define更快的。

最佳答案

C中的枚举的工作方式与定义不同。枚举是语言的一部分,预处理器不处理它,因此STATE_2将被计算为4。

10-07 22:33