我已经为可能在 LISP 中使用的整数和指针等创建了一个结构。
指针至少对齐 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 中使用匿名结构是否有可能?