嵌入式环境中的#define vs enum(它们如何编译?)

时间:2011-01-09 06:31:58

标签: c enums embedded firmware

这个问题已经完成了死亡,我同意enums是要走的路。但是,我很好奇enums如何在最终代码中编译 - #define只是字符串替换,但枚举是否为编译后的二进制文件添加了什么?或者它们在那个阶段都是等价的。当编写固件和内存非常有限时,使用#defines是否有任何优势,无论多小?

谢谢!

编辑:根据以下评论的要求,嵌入式,我的意思是数码相机。

感谢您的回答!我全都是枚举!

3 个答案:

答案 0 :(得分:10)

两者都是标准术语中的常量表达式,因此它们“应该”在编译时由任何理智的编译器完全评估。恶意病态编译器需要生成不同的代码。

答案 1 :(得分:5)

enum最终只是一个整数。编译器传播值,就像传递const一样。

答案 2 :(得分:4)

如果不以其他方式进行剖析或测量,就不可能说出来。

但是,任何体面的编译器都不会显示任何显着差异。此外,您应该始终更喜欢可读的,类型安全的代码而不是高效,不可读,有问题的代码。在你证明了两件事之前,不要开始优化效率而不是可读性:

  1. 你实际上需要提高效率
  2. 您正在更改的程序部分已被证明是分析器的瓶颈。