Я создал структуру для целых, указателей и т. Д., Которые могут быть использованы в 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?