J'ai fait une structure pour ints et pointeurs, etc., comme cela pourrait être utilisé dans LISP. Un pointeur est au moins aligné sur 8 octets, donc tag = 0. Un nombre entier est de 29 bits et a une étiquette de 1. D'autres types ont des valeurs d'étiquette différentes.Comment initialiser le second membre d'une structure anonyme en C?
struct Atom{
union{
Pair *pair;
struct{
unsigned tag :3;
union{
int val :29;
char ch;
struct{
int mant :21;
Exp exp :8;
};
};
};
};
};
Je voudrais les initialiser différemment.
Pour pointeurs:
Atom aPair = {{.pair=0}}; // works
ou
Atom aPair = {{0}}; //works
Cela fonctionne parce que, je suppose, GCC suppose que je veux initialiser le premier membre du syndicat.
Je voudrais aussi un entier initialiser - quelque chose comme ceci:
Atom anInt={{ {.tag=1,{.val=0} } }};
Je sais que ce n'est pas standard C, mais est-ce possible à toutes les structures anonymes dans GCC?
Il y avait une réponse que j'ai commenté - où est-il allé? Quelqu'un m'a suggéré d'essayer Atom anInt = {. Tag = 1, .val = 0}; Cela n'a pas fonctionné, mais c'était quelque chose que je n'avais pas essayé et j'ai apprécié le fait qu'ils ont pris le temps de lire ma question et de suggérer quelque chose. – philcolbourn