c - #define 还是枚举?

标签 c

<分区>

Possible Duplicate:
Why use enum when #define is just as efficient?

在使用 C 语言编程时,对于状态机中的状态使用#define 语句还是枚举更好?

最佳答案

从技术上讲,这并不重要。编译器很可能甚至会为这两种情况创建相同的机器代码,但枚举具有三个优点:

  1. 使用正确的编译器+调试器组合,调试器将按枚举名称而不是编号打印枚举变量。所以“StateBlahBlup”读起来比“41”好得多,不是吗?

  2. 您不必明确地为每个状态指定一个编号,如果您愿意,编译器会为您编号。假设您已经有 20 个状态并且您想在中间添加一个新状态,如果定义,您必须自己进行所有重新编号。在枚举的情况下,您只需添加状态,编译器将为您重新编号此新状态下的所有状态。

  3. 如果 switch 语句没有处理所有可能的枚举值,您可以告诉编译器警告您,例如因为您忘记处理某些值,或者因为枚举已扩展但您也忘记更新处理枚举值的 switch 语句(但是,如果存在 default 情况,它不会发出警告,因为所有值都未明确处理以默认情况结束)。

关于c - #define 还是枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3134757/

相关文章:

c - 如何检查之前是否已定义结构类型?

c - 自由 : Undefined Reference for functions

c++ - gcc 是否优化递归函数?怎么做?

c - 有没有一种方法可以将 "nickname"赋予具有长名称/路径的变量,而无需在 C 中进行赋值

c - 字符串中最长的回文及其长度

c - 支持 OpenACC 的 CAPS 编译器的限制

引用传递也可以称为指针传递吗?

C 堆栈的自由数组指针

c - 在 C 中访问从 Lua 传递的表,而不复制值

c - 让退格键在 curses 屏幕中工作