Ho una struct:È possibile (legale) assegnare un'unione anonima in un letterale composto?
typedef struct _n
{
int type;
union {
char *s;
int i;
};
} n;
Quando si tenta di assegnare un valore letterale composto, come:
node n1 = {1, 0};
node n2 = {2, "test"};
gcc mi dà alcuni avvisi quali:
warning: initialization makes pointer from integer without a cast
warning: initialization from incompatible pointer type
bene, è chiaro che il compilatore non è sicuro di me semplicemente assegnando un valore a un tipo possibilmente ambiguo. Tuttavia, anche se cerco di specificare più precisamente:
node n0 = {type: 1, i: 4};
ottengo:
error: unknown field ‘i’ specified in initializer
Ho letto che se metto (union <union name>)
prima i:
allora può funzionare. Tuttavia, preferisco avere un'unione anonima. C'è un modo per farlo?
Mi ha sorpreso la prima volta che l'ho visto, ma a GCC che è in realtà una sintassi di inizializzazione designata (sebbene deprecata). – ephemient
la sintassi dell'inizializzatore (presumo deprecato) che ho ottenuto leggendo qualche codice del modulo del kernel .. Le strutture "fops" sono spesso scritte in questo modo. passerò al modo C99 ora. Peccato per le unioni anonime, non sapevo che non fossero standard, grazie per averlo chiarito. – Steve