根据现有结构的定义定义结构

时间:2014-04-28 09:23:31

标签: c macros struct

如果我有一个任意的结构,有没有办法可以使用宏来为该结构添加一个字段?

例如:

struct foo{
    int a, 
    int b
};

MAGIC(foo, newtype, newname);

哪个会评估为:

struct foo{
    int a;
    int b;
};

struct magic_foo{
    int a;
    int b;
    newtype newname;

};

我知道这是一个延伸,但我想可能有一些内置的宏从它的名字中检索结构的定义?

1 个答案:

答案 0 :(得分:0)

不是直接的,因为预处理器完全不知道C语法(它只作为令牌替换器运行;对以前声明的类型的内省是不可能的)。

也许这是一种方法:

#define STRUCT { \
    int a;             \
    int b;             \
    EXTRA_MEMBER_DECL  \
}

#define EXTRA_MEMBER_DECL /* empty */
struct foo STRUCT;
#define EXTRA_MEMBER_DECL newtype newname;
struct bar STRUCT;

Plan B可能正在使用嵌套结构:

struct bar {
    struct foo;
    newtype newmember;
};