Рассмотрим следующее объявление структуры C, содержащее типы животных.
typedef enum Animals { DOG, CAT, LION, ELEPHANT, HIPPO } Animals;
typedef struct {
union {
struct {
Animals pet; /*!< Pet animals are stored at index 0 */
Animals zoo; /*!< Zoo animals are stored at index 1 */
};
Animals animals_list[2];
};
} AnimalsList;
. Я бы хотел получить доступ к животным, иногда используя член pet
или zoo
, а иногда перебирать всех животных, используяanimals_list
.Я ожидаю, что pet
всегда будет с индексом 0 из animals_list
и zoo
всегда будет с индексом 1 из animals_list
.
Это предположение верно?Можно ли считать это неопределенным поведением?В частности, я обеспокоен разницей порядка байтов на разных платформах.
Я видел несколько вопросов, касающихся союзов в stackoverflow, но все они, похоже, используют члены разного размера.У моих участников такого же размера , и я пытаюсь сохранить их таким образом.