如何在宏中初始化结构体如下?

Linux内核源码中,在宏中初始化结构体如下:

#define power_attr(_name) \
static struct kobj_attribute _name##_attr = {    \
    .attr    = {                \
        .name = __stringify(_name),    \
        .mode = 0644,            \
    },                    \
    .show    = _name##_show,            \
    .store    = _name##_store,        \
}

这样做的好处是什么,以及声明出来的结构体对象怎么调用?
有没有相关的文章资料,有详细的说明?