Why is this nested macro replacement failing?

后端 未结 3 1082
忘了有多久
忘了有多久 2021-01-04 14:08

I am trying to apply the X Macro concept, in order to have the possibility to initialize all struct members to a custom default (invalid) value. I write the following code:<

3条回答
  •  梦谈多话
    2021-01-04 14:53

    Let's pretend that we are the preprocessor and encountering the line:

    static struct foo test = foo_DEFAULT_VALUE;
    

    Pass 1:

    static struct foo test = { LIST_OF_STRUCT_MEMBERS_foo };
    

    Pass 2:

    static struct foo test = { X(a) X(b) X(c) };
    

    Pass 3: Nothing to expand as X is undefined on this line.


    One workaround could be defining a const variable (possibly but not necessarily static) to be used as default value:

    #define X(name) -1,
    static const struct foo foo_DEFAULT_VALUE = { LIST_OF_STRUCT_MEMBERS_foo };
    #undef X
    

    Which generates:

    static const struct foo foo_DEFAULT_VALUE = { -1, -1, -1, };
    

提交回复
热议问题