Сам по себе язык C этого сделать не позволяет, поскольку не поддерживает такую интроспекцию. Остаётся только пройти по членам структуры и вывести размер каждого.
Однако восемь лет назад мне понадобилось сделать именно это для большой сложной структуры с четырьмя сотнями членов. В итоге я извлёк нужные сведения, разобрав отладочную информацию объектного файла. Подробностей уже не помню, но нужно будет скомпилировать с параметром -g, а затем подходящей утилитой выгрузить отладочные данные. Стоит посмотреть утилиты readelf и objdump, а также их руководства.
Переведено с английского·Показать оригиналThe C language by itself can't do this, because it lacks that kind of introspection. Your only option is to visit each structure member and output its size.
However, eight years back I faced exactly this task with a big, complicated struct containing four hundred members. Eventually I extracted what I needed by parsing the object file's debugging information. I've forgotten the specifics, but you'll have to compile using the -g option, then use a suitable tool to dump the debug information. The readelf and objdump tools and their manuals would be worth checking.