openlang

Можно ли вывести размеры всех вложенных структурных элементов в C?

У меня ситуация, когда одна структура содержит внутри несколько других структур. Вот небольшой пример:

typedef struct payload {
    int offset;
} payload_t;

typedef struct record {
    payload_t payloads[12];
    int status;
} record_t

Можно ли вывести размеры всех структур, входящих в record_t?

Переведено с английскогоПоказать оригинал

Разговор продолжается 2

Следуя доводам
  1. Ссылка на ответ

    Сначала придётся узнать, какие это типы. В отличие, например, от java или c#, в C нет рефлексии.

    Если типы известны, достаточно sizeof и функции, которая напечатает результат.

    Переведено с английскогоПоказать оригинал
  2. Ссылка на ответ

    Сам по себе язык C этого сделать не позволяет, поскольку не поддерживает такую интроспекцию. Остаётся только пройти по членам структуры и вывести размер каждого.

    Однако восемь лет назад мне понадобилось сделать именно это для большой сложной структуры с четырьмя сотнями членов. В итоге я извлёк нужные сведения, разобрав отладочную информацию объектного файла. Подробностей уже не помню, но нужно будет скомпилировать с параметром -g, а затем подходящей утилитой выгрузить отладочные данные. Стоит посмотреть утилиты readelf и objdump, а также их руководства.

    Переведено с английскогоПоказать оригинал

Другие стороны того же вопроса

  1. Использование MATLAB через Google Colab

    Можно ли использовать команды MATLAB из Google Colab (облачного Jupyter)? Например, хотелось бы вызывать из Google Colab функ…

    Ответы 2Последняя активность matlab
  2. Может ли gdb поставить точку останова на инструкцию ассемблера по адресу?

    Моя попытка: но, похоже, такой команды не существует. Может ли gdb сделать что-то подобное?

    Ответы 2Последняя активность assembly
  3. Может ли проверка Playwright допускать один из двух текстов?

    Хочу проверить, содержит ли текст one либо two: Можно ли заставить это работать в Playwright? И можно ли сделать то же самое…

    Ответы 2Последняя активность typescript