Я пытаюсь глобально инициализировать объединение, как в следующем примере:
#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 ++ решение этой проблемы?то есть тот, где именованная инициализация структуры не работает (потому что он не существует в языке)?