我已经制作了一个可以在LISP中使用的整数和指针等结构。如何初始化C中的匿名结构的第二个成员?
指针至少8字节对齐,所以tag = 0。 整数是29位,标记为1. 其他类型具有不同的标记值。
struct Atom{
union{
Pair *pair;
struct{
unsigned tag :3;
union{
int val :29;
char ch;
struct{
int mant :21;
Exp exp :8;
};
};
};
};
};
我想对它们进行不同的初始化。
为指针:
Atom aPair = {{.pair=0}}; // works
或
Atom aPair = {{0}}; //works
这样做是因为,我认为,GCC假设我要初始化联盟的第一个成员。
我也想初始化一个整数 - 这样的事情:
Atom anInt={{ {.tag=1,{.val=0} } }};
我知道这是不是标准的C,但是这是不可能的,在GCC匿名结构?
有一个答案,我评论 - 它去了哪里? 有人建议我尝试Atom anInt = {。tag = 1,.val = 0}; 它没有工作,但它是我没有尝试过的东西,我赞赏他们花时间阅读我的问题并提出建议。 – philcolbourn 2010-02-17 11:22:19