使用枚举时的高效switch语句

std*_*err 2 c enums processing-efficiency switch-statement

我有一个枚举和一个switch语句使用一些枚举条目,但不是全部,它们目前也是乱序,即我有以下内容:

enum prot_tun_stat_e    {
    STAT_A = 0,     
    STAT_B,     
    STAT_C, 
    STAT_D,
    STAT_E,
    STAT_F, //5
    STAT_G,
    STAT_H,
    STAT_I,
    STAT_Y,
    STAT_K,     //10
    STAT_COUNT      //must be last
} __attribute__((packed));
Run Code Online (Sandbox Code Playgroud)

然后我使用以下条目切换:

switch(var) {
case C:
break;
case D:
break
case F:
break
case G:
break
default
}
Run Code Online (Sandbox Code Playgroud)

我想知道我是否更好地重新安排了枚举中的项目C=1,D=2,F=3&G=4?这会更有效吗?

谢谢,罗恩

平台:PowerPC,编译器diab

dav*_*ave 5

如果编译器可以确定switch语句的参数限制为较小的数字,则可以创建跳转表.如果值是连续的,则此表将占用较少的空间,但4个条目之间的差异或所需的10个条目不太重要.(并注意0-3是一个比1-4更好的范围 - 尽管编译器可以通过跳转到偏移来处理这个问题n - 1).

您可以检查编译器的输出以查看是否正在创建跳转表(假设您可以读取汇编!).当然,所有性能问题的答案都是:简介!