7

这个问题已经被做死了,我同意枚举是要走的路。但是,我很好奇枚举如何在最终代码中编译-#defines 只是字符串替换,但是枚举是否会向编译的二进制文件添加任何内容?或者他们在那个阶段都是等价的。在编写固件和内存非常有限的情况下,使用#defines 是否有任何优势,无论多小?

谢谢!

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

感谢您的回答!我完全赞成枚举!

4

3 回答 3

10

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

于 2011-01-09T06:38:38.103 回答
5

最终, Anenum只是一个整数。编译器传播这些值,就像传播const.

于 2011-01-09T06:34:51.337 回答
4

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

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

  1. 你实际上需要提高效率
  2. 您正在更改的程序部分已被分析器显示为瓶颈。
于 2011-01-09T06:36:24.200 回答