Access an enum using an index in C

后端 未结 4 1481
梦毁少年i
梦毁少年i 2021-01-13 09:17

Consider:

enum Test
{
    a = 3,
    b = 7,
    c = 1
};

I want to access the enum using an index. Something like this:

for         


        
相关标签:
4条回答
  • 2021-01-13 09:27

    This is the best you can do:

    enum Test { a = 3, b = 7, c = 1, LAST = -1 };
    static const enum Test Test_map[] = { a, b, c, LAST };
    
    for (int i = 0; Test_map[i] != LAST; i++)
        doSomething(Test_map[i]);
    

    You have to maintain the mapping yourself.

    0 讨论(0)
  • 2021-01-13 09:27

    As someone else mentioned, this is not the purpose of an enum. In order to do what you are asking, you can simply use an array:

    #define a 3
    #define b 7
    #define c 1
    
    int array[3] = { a, b, c };
    int i;
    
    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ ) {
        doSomething( array[i] );
    }
    
    0 讨论(0)
  • 2021-01-13 09:32

    You can't do that. A C enum is not much more than a bunch of constants. There's no type-safety or reflection that you might get in a C# or Java enum.

    0 讨论(0)
  • 2021-01-13 09:38

    Your question demonstrates you don't really understand what an enum is for.

    It is not something that can be indexed, nor is there ever any reason to. What you have defined is actually just 3 constants named a, b, and c, whose values are 3, 7, and 1 respectively.

    0 讨论(0)
提交回复
热议问题