Ищите немного значка буфера обмена, который открывается в конце материала, который Вы вставили. Нажмите на это и выберите "keep text only".
Анонимные объединения не являются стандартом C - они являются расширением компилятора. Я настоятельно рекомендую дать профсоюзу имя. Если вы настаиваете на использовании анонимного объединения, тогда вы можете указать инициализатор только для первого его элемента:
node n0 = {1, 0}; // initializes `s' to 0
При компиляции с -Wall -Wextra -pedantic
, gcc выдал мне предупреждение «недостающие фигурные скобки around initializer ", что является допустимым предупреждением. Инициализатор на самом деле должен быть указан следующим образом:
node n0 = {1, {0}}; // initializes `s' to 0
Теперь это дает только предупреждение о том, что «ISO C не поддерживает безымянные структуры / объединения».
Если вы дадите объединению имя, вы можете использовать функцию C99 вызываемые назначенные инициализаторы для инициализации конкретного члена объединения:
typedef struct
{
int type;
union {
char *s;
int i;
} value;
} node;
node n0 = {1, { .s = "string"; }};
node n1 = {2, { .i = 123; }};
Вам нужно, чтобы объединение имело имя; иначе, компилятор будет жаловаться на назначенный внутри него инициализатор.
Синтаксис, который вы пытались использовать node n0 = {type: 1, i: 4}
, является недопустимым синтаксисом; похоже, вы пытались использовать назначенные инициализаторы.