比较符号常量,枚举,常量变量

时间:2010-09-13 10:57:22

标签: c enumeration constants typechecking

符号常量 - 无类型检查 - >该值仅被替换为
枚举 - 比符号常数更安全类型 常数变量 - 大多数类型安全

还可以添加其他任何内容吗? 这些空间占用的空间有何不同?

3 个答案:

答案 0 :(得分:3)

  • 符号常量(带#define):在定义点没有检查。在文本替换后,在使用点进行正常检查。可用于任何基本类型的常量(在C99中,即使对于非基本类型)

  • 枚举:只能保存整数,并在定义时进行检查。

  • const - 限定变量:C中不是真正的常量,但应视为“只读”变量。由于它不是一个常数,因此不能在语言需要常量的地方使用。

应该假设变量(即使它们是“只读”)消耗内存。可以假设枚举器和#define生成直接插入代码中的常量值。实际上,这实际上取决于常量的类型和处理这些常量的CPU的能力。

就类型安全而言,没有太大的区别。如果您尝试初始化具有非整数的枚举数,编译器会更大声地抱怨。

实际上,枚举通常用于密切相关的整数常量组,而#define s几乎用于其他所有。

答案 1 :(得分:1)

符号常量得到一些类型检查,通常编译器会告诉你一个常量是否太大而不适合你指定它的地方

枚举常量完全没有类型检查,因为它们只是int。与枚举类型相反,变量可能会进行某种类型和范围检查。

没有像常量变量这样的东西,你可能意味着const限定变量。这些是类型安全的,是的,但不是C如何理解单词常量的常量。请更好地考虑unmutableinvariant

C语义中的​​常量不占用任何空间,它们只是编译时需要的符号值,在执行过程中没有对应它们的对象。

答案 2 :(得分:0)

我个人会选择枚举 - >使您能够声明常量,并且仍然可以与以下结构一起使用:XmlStatusesEnum :: XML_FILE_OK。