【发布时间】:2011-07-11 17:24:40
【问题描述】:
所以一个枚举是这样工作的:
enum {
false,
true
}
相当于
int false = 0
int true = 1
我为什么不将enum 替换为#define?
#define FALSE 0
#define TRUE 1
在我看来,它们似乎是可以互换的。我知道#define 能够处理参数,因此以与enum 完全不同的方式运行。当我们有#define 时,enum 的主要用途究竟是什么在这种情况下?
如果我猜的话,#define 是一个预处理器功能,enum 将具有一些运行时优势。我还有多远?
提前致谢。
【问题讨论】:
-
奇怪,我的搜索结果中没有出现那个。谢谢!
-
它不等同于
int false = 0也不等同于int const false = 0(这会更合适)。int变量会有一个地址,然后你可以使用&false,而enum则不能。 -
请注意,SO 136946 被标记为 C++ 和 C。名义上,它不如 SO 1674032 仅适用于 C,但我可能会被说服。跨度>
-
有趣的是,我发现这个问题的同时想知道恰恰相反:为什么 C 程序员使用
#definess 而不是enums。