【发布时间】:2010-11-09 23:24:28
【问题描述】:
sizeof(enum) == sizeof(int),总是吗?
- 还是依赖于编译器?
- 这是错误的说法,因为编译器针对字长(内存对齐)进行了优化,即 y int 是特定编译器的字长?这是否意味着如果我使用枚举就没有处理惩罚,因为它们是字对齐的?
- 如果我将所有返回码放在一个枚举中不是更好吗,因为我显然不担心它得到的值,只担心检查返回类型时的名称。如果是这种情况,#DEFINE 会不会更好,因为它会节省内存。
通常的做法是什么? 如果我必须通过网络传输这些返回类型并且必须在另一端进行一些处理,那么您更喜欢 enums/#defines/const ints。
编辑 - 只是在网上检查,因为编译器不会符号链接宏,那么人们如何调试,将整数值与头文件进行比较?
来自答案——我在下面添加这一行,因为我需要澄清——
“所以它是实现定义的,并且 sizeof(enum) 可能等于 sizeof(char),即 1。”
- 这不是说编译器检查枚举值的范围,然后分配内存。我不这么认为,我当然不知道。谁能解释一下什么是“可能”。
【问题讨论】:
-
来自某个论坛上的网络,“我认为枚举应该尽可能小以容纳其所有值,在本例中为 1 个字节。”是真的吗。
-
感谢所有我学到的一些合理怀疑,我认为这肯定有助于更好地理解这个概念。
-
我从“nuriaion”和“lulian Sebaniou”中找到了与部分问题相关的答案。任何人都可以评论正确性。
标签: c enums constants c-preprocessor