Ich habe eine Struktur:Ist es möglich (legal) eine anonyme Union in einem zusammengesetzten Literal zuzuweisen?
typedef struct _n
{
int type;
union {
char *s;
int i;
};
} n;
Wenn ich versuche, eine Verbindung wörtliche zuweisen, wie:
node n1 = {1, 0};
node n2 = {2, "test"};
gcc gibt mir einige Warnungen wie:
warning: initialization makes pointer from integer without a cast
warning: initialization from incompatible pointer type
Nun, es ist klar, dass der Compiler mir nicht sicher ist, nur einen Wert einem möglicherweise mehrdeutigen Typ zuzuweisen. Aber auch wenn ich versuche, genauer zu spezifizieren:
node n0 = {type: 1, i: 4};
ich:
error: unknown field ‘i’ specified in initializer
Ich habe gelesen, dass wenn ich (union <union name>)
vor i:
setzen, dann kann es funktionieren. Ich bevorzuge jedoch eine anonyme Vereinigung. Gibt es einen Weg, es zu tun?
Es überraschte mich das erste Mal, als ich es sah, aber für GCC, das ist eigentlich legal (obwohl veraltet) bezeichnet Initialisierersyntax. – ephemient
, dass (ich denke, veraltet) Initialisierung Syntax habe ich von einigen Kernel-Modul-Code lesen .. 'Fops' Strukturen werden oft auf diese Weise geschrieben. Ich werde jetzt auf den C99-Weg wechseln. Schade um die anonymen Gewerkschaften, ich wusste nicht, dass sie nicht Standard sind, danke, dass du das für mich geklärt hast. – Steve