Is there any way to loop through a struct with elements of different types in C?

后端 未结 4 1734
迷失自我
迷失自我 2020-11-29 21:45

my struct is some like this

typedef struct {
  type1 thing;
  type2 thing2;
  ...
  typeN thingN;
} my_struct 

how to enumerate struct chil

4条回答
  •  一向
    一向 (楼主)
    2020-11-29 22:35

    I'm not sure what you want to achieve, but you can use X-Macros and have the preprocessor doing the iteration over all the fields of a structure:

    //--- first describe the structure, the fields, their types and how to print them
    #define X_FIELDS \
        X(int, field1, "%d") \
        X(int, field2, "%d") \
        X(char, field3, "%c") \
        X(char *, field4, "%s")
    
    //--- define the structure, the X macro will be expanded once per field
    typedef struct {
    #define X(type, name, format) type name;
        X_FIELDS
    #undef X
    } mystruct;
    
    void iterate(mystruct *aStruct)
    {
    //--- "iterate" over all the fields of the structure
    #define X(type, name, format) \
             printf("mystruct.%s is "format"\n", #name, aStruct->name);
    X_FIELDS
    #undef X
    }
    
    //--- demonstrate
    int main(int ac, char**av)
    {
        mystruct a = { 0, 1, 'a', "hello"};
        iterate(&a);
        return 0;
    }
    

    This will print :

    mystruct.field1 is 0
    mystruct.field2 is 1
    mystruct.field3 is a
    mystruct.field4 is hello
    

    You can also add the name of the function to be invoked in the X_FIELDS...

提交回复
热议问题