Т-34 85
union это такой тип, в котором ты описываешь, что в него может быть положено (что-то одно из), а память под этот юнион выделяется по размеру максимального типа из указанных, независимо от того, что ты туда заложишь. Короче, применение похоже на растовский Result
А enum ты знаешь по шарпу. Теперь видишь разницу?
Не размер максимального типа. _как минимум_ размер максимального, т.к. может встроиться пустота, по крайней мере, в Си