使用typedef的C枚举类型的值

时间:2013-04-19 14:19:35

标签: c typedef enumeration


你知道ALL_MODULE的结果吗?
你知道哪本书描述了这种情况吗? 非常感谢。 :)

typedef enum
{
  MODULE0,
  MODULE1,
  MODULE2
}MODULE_TAG;

#define ALL_MODULE (MODULE_TAG-1)

2 个答案:

答案 0 :(得分:4)

我认为这个定义可能有点不同:
#define ALL_MODULE ((MODULE_TAG)-1)

E.g。

#include <stdio.h>

typedef enum
{
  MODULE0 = 1,
  MODULE1 = 2,
  MODULE2 = 4
}MODULE_TAG;

#define ALL_MODULE ((MODULE_TAG)-1)

int main(){
    MODULE_TAG all = ALL_MODULE;
    MODULE_TAG amod = MODULE1;

    if(amod == MODULE1){
        printf("amod equal MODULE1\n"); 
    }
    if(amod != MODULE1){
        printf("amod not equal MODULE1\n"); 
    }

    if(all & MODULE0){
        printf("all has MODULE0\n");
    }
    if(all & MODULE1){
        printf("all has MODULE1\n");
    }
    if(all & MODULE2){
        printf("all has MODULE2\n");
    }
    return 0;
}

答案 1 :(得分:1)

枚举typedef没有值。在表达式中使用ALL_MODULE将导致编译错误。