Я пытаюсь глобально инициализировать объединение, как в следующем примере:
#include <cstdio>
typedef union {
char t[4];
int i;
} a;
enum {
w = 5000,
x,
y,
z
};
a temp = {w};
int main() {
printf("%d %d %d %d %d\n", temp.t[0],temp.t[1],temp.t[2],temp.t[3],temp.i);
return 0;
}
Однако, если вы запустите код, вы заметите, что ни temp.i, ни temp.t [. ..] фактически дает правильный элемент, с которым я инициализировал объединение. Я предполагаю, что этого можно было бы избежать, если бы я мог вручную инициализировать целочисленный член, но, к сожалению, я не могу. Я также не могу изменить порядок элементов в структуре (замена порядка int и char инициализирует все правильно) - они фактически предоставляются внешней библиотекой. У меня такой вопрос: как я могу установить целочисленный член структуры глобально , а не член char [4] (или, в данном случае, только первый элемент char [])?
РЕДАКТИРОВАТЬ: Есть ли решение этой проблемы строго на C ++? то есть тот, в котором инициализация именованной структуры не работает (потому что она не существует в языке)?