У меня есть-структуру:Возможно ли (юридическое) присвоить анонимный союз в составном литерале?
typedef struct _n
{
int type;
union {
char *s;
int i;
};
} n;
При попытке присвоить соединение буквальным, как:
node n1 = {1, 0};
node n2 = {2, "test"};
НКУ дает мне некоторые предупреждения, такие как:
warning: initialization makes pointer from integer without a cast
warning: initialization from incompatible pointer type
Ну, это ясно, что компилятор не уверен, что я просто назначаю значение, возможно, двусмысленному типу. Тем не менее, даже если я попытаюсь более точно указать:
node n0 = {type: 1, i: 4};
я получаю:
error: unknown field ‘i’ specified in initializer
Я прочитал, что если я ставлю перед тем (union <union name>)
i:
, то он может работать. Тем не менее, я предпочитаю иметь анонимный союз. Есть ли способ сделать это?
Это удивило меня в первый раз, когда я это увидел, но для GCC это действительно юридический (хотя и устаревший) синтаксис инициализатора. – ephemient
, который (я думаю, устарел) синтаксис инициализатора, который я получил от чтения некоторого кода модуля ядра. Структуры «fops» часто записываются таким образом. Теперь я переключусь на C99. Слишком плохо об анонимных профсоюзах, я не знал, что они не стандартные, спасибо, что расчистили это для меня. – Steve