编译的枚举常量

时间:2014-08-04 12:11:44

标签: c enums c-preprocessor

Enum是否在 C 替换中,如#define

例如,如果我有一个标志列表,如:

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

当编译代码时,值将具有语句或精确语句的评估结果,如使用#define

例如,将STATE_2评估为40x1<<2

PS:混淆的原因来自于我所看到的enum vs #define问题没有一个问题表明,对于简单表达式,枚举比#define更快,如果编译器优化是禁用。

1 个答案:

答案 0 :(得分:2)

C中的枚举不像#defines那样工作。枚举是语言的一部分,预处理器不处理,因此STATE_2将被评估为4。