Mam struct:Czy jest możliwe (legalne) przypisanie anonimowego związku w literale złożonym?
typedef struct _n
{
int type;
union {
char *s;
int i;
};
} n;
Kiedy próbuję przypisać związek dosłowne, jak:
node n1 = {1, 0};
node n2 = {2, "test"};
gcc daje mi jakieś ostrzeżenia takie jak:
warning: initialization makes pointer from integer without a cast
warning: initialization from incompatible pointer type
Cóż, to wyjaśnij, że kompilator nie jest pewny, że przypisuję wartość potencjalnie niejednoznacznemu typowi. Jednakże, nawet jeśli staram się bardziej precyzyjnie określić:
node n0 = {type: 1, i: 4};
uzyskać:
error: unknown field ‘i’ specified in initializer
Czytałem, że jeśli mogę umieścić (union <union name>)
przed i:
to może działać. Wolę jednak anonimowy związek. Czy jest jakiś sposób na zrobienie tego?
Zaskoczyło mnie to, gdy zobaczyłem go po raz pierwszy, ale do GCC, która jest właściwie legalną (choć przestarzałą) określoną składnią inicjalizującą. – ephemient
że (myślę, że przestarzałe) składnia inicjalizatora dostałem od czytania kodu modułu jądra. Struktury "fops" są często pisane w ten sposób. Przejdę teraz na drogę C99. Szkoda w anonimowych związkach, nie wiedziałem, że nie są standardowe, dzięki za wyjaśnienie tego dla mnie. – Steve