我是第一次开始学习C语言。这个问题听起来很基础,但是我将不胜感激!
我的问题是,是否可以
enum day {
mon, tue, wed
};
int main() {
int today = mon;
return 0;
}
将“ today”变量设置为0,为什么大多数教程都这样写
enum day {
mon, tue, wed
}today;
int main() {
today = mon;
return 0;
}
我将枚举视为类。因此,指定使用枚举的变量对我来说没有任何意义。为什么第二种书写方式更常见?
枚举后来被添加到C语言中。因此,它们不是“强类型”的-C并不能将它们与其他整数值区分开来-因此它们在很大程度上很方便。
从理论上讲,您可以将对象声明为枚举类型,以表明该对象应具有枚举中的某些值,而不应包含其他任何值。C标准不要求强制执行。一些编译器在某些情况下可能会警告您违反此规定,但他们无法完全抓住它们。
枚举中的每个标识符都有一个int
值。因此,人们将它们用作定义编译时常量的一种方式。这些通常是简单的连续常量,例如一周中的天数,但是它们也可以是任意常量,例如位掩码或内存地址(在int
范围内)。那不是他们的真正目的,而是他们有用的东西,所以人们会使用它。
枚举类型和为其定义的任何对象(例如您声明的对象enum day today
)必须具有与某种整数类型兼容的类型。例如,如果枚举中的所有值都在的范围内char
,则枚举类型可以有效地为char
。这意味着与声明相比,结构中的空间可能更少int
。但是,C标准没有要求编译器使用适合的最小整数类型,因此此功能对于依靠枚举来限制使用的空间没有用。
当将一些通用整数值分配给枚举对象时,C标准也不要求任何警告。在现有的枚举设计中,这实际上是不可能的—因为枚举标识符是int
值,所以使用它们的任何赋值的右侧(如中today = Monday + 1
的int
)至少是枚举中的一个(显然)值,并且变得很难供编译器诊断问题。
由于存在关于枚举的松散规则,因此没有将对象定义为枚举类型而不是诸如int
或的严格规则char
。可能希望将某种东西定义为一种枚举类型,以传达给源代码的未来读者,该东西正被用来记录该枚举类型,但是也可能希望将其定义为a,uint8_t
以确保仅使用一种枚举类型。数组或结构中的字节。因此,选择的理由相互矛盾,因此作者将不得不选择一个或另一个。
通常,如果您只是在代码中使用枚举来保存和使用枚举值,并且它不是数组或结构或其他对空间影响很大的事物的一部分,请使用枚举类型对其进行定义。这最好传达给读者和编译器您的意图。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句