В C теги struct находятся в отдельном пространстве имен, и вам нужно использовать ключевое слово struct для доступа к именам в них. По этой причине идиома «typedef struct {} x» так популярна в C - она позволяет вам существенно продвигать имена структур в глобальное пространство имен.
В C ++, напротив, структуры (и все другие имена) живут в пространстве имен, окружающем объявление, а не в отдельном пространстве имен struct tag, как в C.
Как сказал Саураб, используйте sizeof (struct x) в C или используйте трюк typedef struct {} x
, чтобы sizeof (x) работал так же, как в C ++.
В качестве дополнительного бонуса программа C ++ выводит 1, потому что конкретные объекты класса должны иметь ненулевой размер (чтобы разные объекты имели разные адреса), поэтому компилятор дополнил структуру анонимным значением char.