【问题标题】:Compiled enum constants编译的枚举常量
【发布时间】: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&lt;&lt;2?

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

【问题讨论】:

  • 它将被评估为4。 C 中的常量表达式是预先计算的。

标签: c enums c-preprocessor


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 2020-05-06
    • 1970-01-01
    • 2015-08-21
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多