【发布时间】:2014-08-04 12:11:44
【问题描述】:
C 中的 Enum 是否像 #define 一样替换?
例如,如果我有一个像这样的标志列表:
enum{
STATE_0 = 0x1<<0,
STATE_1 = 0x1<<1,
STATE_2 = 0x1<<2,
STATE_3 = 0x1<<3,
.
.
.
}
当编译的代码将值具有语句或精确语句的评估结果,如使用#define。
例如,STATE_2 会被评估为4 还是0x1<<2?
PS:混淆的原因是我所看到的enum 和#define 问题的答案都没有表明,如果禁用编译器优化,对于简单表达式,枚举比#define 快。
【问题讨论】:
-
它将被评估为
4。 C 中的常量表达式是预先计算的。
标签: c enums c-preprocessor