это в текстовом файле, читаем ее и строим в рантайме соотв. структуру и создаем соотв переменную. Чтобы например потом считать другой файл в эту переменную.
НО если надо вытащить ВСЮ метаинформацию о структуре и куда-то её скласть, то gdb api вам в помощь :)
На поверхностный взгляд просто - автоматически делается программа с единственной переменной нужного типа и функцией main. Собирается с ключом -g. Запускается под отладчиком..Далее допрос отладчика и складывание результатов в укромное место :)
> не только размер. мне, можно сказать, нужны размеры всех элементов структуры.
То есть тебе нужно нечто большее, чем ты говоришь. Скажем, разобрать байтовый массив на поля, причем знать тип полей, имена, смещения - т.е. всё, что знает компилятор. Я, правда, не понимаю, что ты собираешься делать с этой информацией (кроме как красиво ее напечатать), но всё это можно выцепить из DWARF.
тут есть два варианта - кодогенерация, т.е. вынести часть логики для обработки структуры в отдельный компилируемый код, либо «влезть» в данные самого tcc, который хранит у себя сведения о типах, опять же зависит от задачи
Тогда только libdwarf или libtcc (но этой я никогда не пользовался). В принципе, если допустимо гибридное решение, можно python-ctypeslib (или тем же cparser) генерировать простейший дескриптор (список полей структуры), и его уже загружать в программу на чистом Си.
Нет. Не всегда. Никак вы не поймете - есть текст, например заголовочный файл. Из него надо считать структуры, распарсить, и создать точно такие же структуры в памяти (реальные C структуры), и, уже, ими манипулировать.
А я чуть по другому вопрос поставлю.
Есть некоторая структура, ее дампят на диск (ее или массив структур). Есть возможность снабдить дамп заголовком. Нужно слить в заголовок некоторое описание структуры (типов и сдвигов полей), что бы потом при чтении из другой программы можно было выдернуть отдельные поля (по названиям) структуры и сунуть их в другую структуру. Объемы данных большие, чтение делается на С++ и должно работать по возможности быстро. Как это можно сделать проще всего?
Нужно при сохранении данных расчета на диск и последующей обработке. Обработка стандартная, а формат сохранения может менятся очень часто. Т.е. что бы единожды написанная обработка автоматом понимала все форматы.
> Есть некоторая структура, ее дампят на диск (ее или массив структур). Есть возможность снабдить дамп заголовком. Нужно слить в заголовок некоторое описание структуры (типов и сдвигов полей)
Т.е. какие-то примитивные метаданные («словарь данных», ЕВПОЧЯ %)).
Т.е. что бы единожды написанная обработка автоматом понимала все форматы.
Ну, например: удалили поле, добавили поле. Что делает обработка?
Ну то есть в файле хранить список полей файла, в программе - список полей, нужных для обработки, и уметь задавать программе отображение из одного в другое (с дефолтовым отображением по совпадающим имени и типу). Никаких принципиальных проблем (при отсуствии вложенных структур - вообще никаких проблем), но готовой библиотеки для этого я не знаю.
Изощренное упорядочение этих структур в массиве. Вектором эмулируется многомерный массив, но смещение считается не как обычно а локально-рекурсивно. В принципе конечно в HDF5 это всунуть можно, но не очень понятно пока зачем.