如果我有一个任意的结构,有没有办法可以使用宏来为该结构添加一个字段?
例如:
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;
};
我知道这是一个延伸,但我想可能有一些内置的宏从它的名字中检索结构的定义?
答案 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;
};