Extending这个问题,我想使用我认为的val,因为它们是“应该”的,
#include <stdio.h>
enum E{ A, B, C } ;
#define inc(enVal) (*((int*)&enVal))++
int main()
{
E t = A ;
inc( t ) ;
printf( "t %d\n", t ) ;
}
现在呃,t
是枚举类型E的变量,我有一个宏inc
,可以将t
的值增加1,
这个宏(并且可能是其他用于标记检查的宏)的效率要比仅使用int t
效率低得多吗?
答案 0 :(得分:11)
不,效率不高。然而,它将是令人难以置信的,可怕的,错误的。请永远不要。
哦,尤其是因为枚举的支持类型是未定义的,并且它们实际上可能会在某些编译器上编译为小于int
的大小。
答案 1 :(得分:5)
答案 2 :(得分:0)
我很确定这违反了标准中的严格别名规则,而且不仅仅是它根本不适用于C
。你真的想做什么?它实际上是否使SENSE增加值?
假设您正在尝试实现状态机,更好的是只有一个vector
/数组查找表并使用它来移动到新状态。
如果您希望能够假设枚举值是连续的,您确定不应该只使用int
吗?