技巧和窍门–在#define上使用枚举

乍看之下,enum和#define似乎完全可以互换。就开发人员而言,它们的编译行为之间确实没有明显的区别。通过仔细检查,可以看出使用#define语句枚举有很多优点!

枚举vs #define

 

两者之间的差异之一是#define是预处理程序指令,而enum是实际C语言的一部分。 #define语句由编译器处理,甚至没有看过C代码的第一行!这导致#define在代码中更多地是文本替换,这不幸的影响是未生成可用于帮助调试过程的符号。使用#define的另一个不幸的可能性是,在代码的其他地方,另一个程序员可以#undef然后重新定义值!这可能会对应用程序产生不利影响。

枚举的使用具有许多优点。首先,编译器可以为枚举生成符号,因此允许调试器使用这些符号来协助调试。接下来,枚举的定义可以生成诸如int之类的类型,然后可以将其与程序中的其他变量进行比较,以确保在数学上没有任何麻烦。

与#define相比,使用enum的另一个优点是它更加结构化和面向对象!考虑使用状态机,其中需要定义十个不同的状态。如果将来必须对状态机进行更改,则使用枚举相对来说是微不足道的,但是对于#define,这可能意味着必须进行make并更改大量的#define语句!

大多数现代调试器的监视窗口还将用数字值替换枚举定义,以便开发人员可以读取定义的状态,而不是表示状态的数字。这有助于简化调试,并最大程度地减少了误解系统状态的机会。

这些只是在下次使用#define或咬住子弹并使用枚举的决定时要记住的一些想法。由于上述原因,我更喜欢后者,但我很想听听双方的意见!

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.