Я удивлен, что есть современный компилятор, который все еще позволяет эту конструкцию. Это один из ранних дней C, около 1975 года. В те дни члены структуры и объединения фактически не были привязаны к конкретной структуре, а содержали в качестве атрибутов смещение от базового адреса и типа данных.
Конечный результат состоял в том, что правильное использование структуры или объединения приводит к правильному коду с выражениями, оцененными как и ожидалось. Единственное отличие состоит в том, что неправильное использование элемента структуры с указателем, не связанным с типом, не будет помечено как ошибка. Я не думаю, что была какая-то конкретная причина для того, чтобы не навязывать партнеру - намек K & R, что будущие компиляторы , надеюсь, будут проверять такое использование - возможно, просто для того, чтобы сохранить табличное пространство символов в 16-битной земле.