Number of elements in an enum

后端 未结 8 2333
抹茶落季
抹茶落季 2020-12-05 02:06

In C, is there a nice way to track the number of elements in an enum? I\'ve seen

enum blah {
    FIRST,
    SECOND,
    THIRD,
    LAST
};

8条回答
  •  天涯浪人
    2020-12-05 02:42

    Old question, I know. This is for the googlers with the same question.

    You could use X-Macros

    Example:

    //The values are defined via a map which calls a given macro which is defined later
    #define ENUM_MAP(X) \
          X(VALA, 0)    \
          X(VALB, 10)   \
          X(VALC, 20)
    
    //Using the map for the enum decl
    #define X(n, v) [n] = v,
    typedef enum val_list {
        ENUM_MAP(X) //results in [VALA] = 0, etc...
    } val_list;
    #undef X
    
    //For the count of values
    #define X(n, v) + 1
    int val_list_count = 0 + ENUM_MAP(X); //evaluates to 0 + 1 + 1 + 1
    #undef X
    

    This is also transparent to an IDE, so auto-completes will work fine (as its all done in the pre-processor).

提交回复
热议问题