编译的枚举常量

标签 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 的答案。对比#define问题指出对于简单表达式枚举比 #define 更快,如果编译器优化被禁用。

最佳答案

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

关于编译的枚举常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25118405/

相关文章:

创建一个非阻塞定时器来删除数据

c++ - 如何在类外返回枚举 vector ?

java - 为什么我不能从 Java 中的专用枚举值访问静态最终成员

swift - 在没有 rawValue 的情况下使用 Swift 枚举作为 View 标签号

c - 替换 For 循环的宏

c++ - 用预处理器 #define 替换作用域标识符

c++ - 关于C++预处理器的问题

c - 结构数组 - 数组具有不完整的元素类型(在 C 中)

c - 我对 fgets() 和 strtok() 的使用对于解析多行输入是否不正确?

c - 在嵌入式系统中寻找熵源?