C语言中枚举的大小
如何知道枚举的大小C语言中枚举的大小,c,C,如何知道枚举的大小天数?它是否等于7*4(sizeof(int))=28? 这里的printf()给了我值4,怎么解释呢 enum Days { saturday, sunday , monday , tuesday, wednesday, thursday, friday } TheDay; printf("%d", sizeof(enum Days)); 我们还可以
天数
?它是否等于7*4(sizeof(int))=28
?这里的
printf()
给了我值4
,怎么解释呢
enum Days
{
saturday,
sunday ,
monday ,
tuesday,
wednesday,
thursday,
friday
} TheDay;
printf("%d", sizeof(enum Days));
我们还可以将其用作(枚举天数)(0),这类似于整数数组。如果大小等于4,那么如何解释这种数组行为?
enum
通常大小为int
。它是一种类型,而不是数组或结构,所以我不明白为什么您希望它是28。它依赖于实现。枚举仅保证足够大以容纳整数值
参考资料:C99标准6.7.2.2枚举说明符 约束
2定义枚举常量值的表达式应为整数 具有可表示为int的值的常量表达式。
…
4每个枚举类型应与char、有符号整数类型或无符号整数类型兼容。类型选择由实现定义(128),但应能够表示枚举的所有成员的值。枚举类型在紧接着终止枚举器声明列表的}之后是不完整的,然后才完成
在C语言中,所有枚举大部分时间都是
int
类型的整数,这就解释了为什么sizeof(Days)==4
要知道一个枚举中有多少个值,可以执行以下操作:
enum Days
{
saturday,
sunday,
monday,
tuesday,
wednesday,
thursday,
friday,
NUM_DAYS
};
然后,NUM_DAYS
将是DAYS
中的枚举数
请注意,如果更改枚举的值,这将不起作用,例如:
enum Foo
{
bar = 5,
NUM_FOO
};
在上面的枚举中,NUM_FOO
将是6
在C中,枚举类型是实现定义的整数类型,可以表示枚举中的所有枚举常量
使用gcc
如果枚举常量中没有负值,则实现定义的类型为unsigned int
,否则为int
枚举类型不应与枚举常量混淆。枚举常量的类型为int
对于我现在使用的编译器,sizeof(Enum)
取决于存储的最大值。如果所有的enum
值都是,那么您的答案就有疑问了,因为您大多数时候都说的是int
*类型的整数。然而,精确的答案是大小是**imlpement定义的。实际上,大多数时候,gcc
都是unsigned int
+1,用于解释如何计算枚举中的项数,这是OP可能需要的。这有一个关于“枚举值未处理”的小警告流,例如,在切换枚举类型时(enum Foo bar;switch(bar){}
。哪一个原因可以用一个空的案例来处理,还是合理的默认值:
案例。真正的问题是为什么它是4而不是28,你没有回答。我认为约阿希姆的回答更切题,因为他解释了OP实际需要知道的内容。不,实际上,我解释了为什么我否决了你的答案。你可能是正确的你引用的答案中没有,但这不是OP需要或要求的。我根据你的评论更正了我的答案,请长大点,也这样做。@LittledV:我不会修改这个答案,因为它完全符合OP的要求。你应该再看一遍Q的要求。答案正好回答了这个问题,如果你看不到,那么就把它写下来投票只不过是恶意的报复性噪音。你必须纠正你的答案,因为它不正确。这个答案不会因为它正确而改变,我敢说任何人都会证明我不正确。对你的否决票感到高兴。除非你敢于证明这个答案不正确,否则我的对话就结束了。我实际上已经读过这个问题,并且OP显然需要解释什么是“枚举”是的。引用标准是没有帮助的。如果你不能理解这一点,我真的为你感到难过。我真的不明白为什么你不能真正地回应批评,而不是与批评作斗争。你让我读你的答案,所以我读了,并发表了我的意见。我可以澄清一点吗。枚举不能保证是大的虽然要保存整数值,它与整数值兼容。如果编译器选择使用一个字节来保存枚举,正如@Jonathan在上面指出的那样,而我的编译器这样做了,那么它可能与等价的整数值兼容,但不必太大而足以保存整数值。@LittledV我们可以使用(枚举天数)(0).所以我认为这是一个数组,因此doubt@abhi(枚举天数)(0)正在强制转换。数组索引标记为[],而不是()。