Я не знаю C, но в C ++ ваш код должен быть эквивалентен:
#include <stdio.h>
union HABITATION { float chair; int bed; };
struct HOUSE { HABITATION room; int number; };
int main()
{
scanf("%d",&HOUSE.room.bed);
}
Может быть, теперь очевидно, что вы просто определили два типа, но вы никогда не создадите экземпляр чего-либо в этом коде,HOUSE
- это тип, а не экземпляр.
В c ++ вы бы сделали
#include <iostream>
int main()
{
HOUSE h;
std::cin >> h.room.bed;
}
И, вероятно, не использовали бы все ЗАГЛАВНЫЕ имена. Некоторые используют их для глобалов, я больше на стороне полного их запрета. Имена должны говорить сами за себя, не нужно кричать. House
достаточно ясно, если вы используете заглавные буквы для классов и все строчные буквы для экземпляров (например, house
). Это также то, что предлагает Страуструп в своем руководстве .