У меня много c-структур (содержащих подструктуры, содержащие объединения, содержащие подструктуры ...)), и я хотел бы распечатать их так же, как это может сделать gcc.
Поэтому я не хочу делать то, что описано в Как мне выгрузить произвольную структуру в C?, потому что это просто шестнадцатеричный дамп
и я также не хочу изобретать какой-то самоанализ (например, java / современный c ++), но просто хочу использовать знания, которые gcc имеет / генерирует для gdb, и добавить некоторые знания, которые у меня есть (например, как выбрать правильный вариант объединения )
как предлагается в Linux C: Простой и "красивый" дамп / распечатка структур (как в gdb) - из исходного кода?.
Итак, мой план таков: возьмите весь этот хороший c-код, который у меня есть, позвольте gcc поработать над ним и создать некоторую метаинформацию, которая на втором этапе анализируется / анализируется чем-то, что затем может интерпретировать / распечатать часть память согласно этой информации.
В Linux есть утилита под названием pstruct / c2ph, которая делает нечто подобное и, кажется, имеет некоторый уровень знаний, который можно изменить, чтобы делать то, что я хочу.
Итак, в основном я ищу инструмент, который принимает файл, содержащий
struct X {
int a;
char *b;
}
и создает функцию lile printX (void * p); который затем печатает что-то вроде {a: 1, b: "lala"}, если p указывает на соответствующий X
Так есть ли что-то, что уже может это сделать? Такое ощущение, что структура очень близка ...
sed
для создания функций печати для каждой из них. Становится лучше, если вы используете в них универсальные шаблоны C11, возможно, в результате вы получите универсальную функцию печати. - person Gábor Buella   schedule 04.04.2014c2ph
, который когда-то был производным от программы-предшественникаpstruct
? - person Jonathan Leffler   schedule 04.04.2014sed
мне до сих пор кажется забавной, только нужно работать после препроцессора, до компилятора. Это действительно должно быть достаточно анализируемым, также было бы несложно обрабатывать typedef и игнорировать квалификаторы, такие как const, volatile и т. Д. - person Gábor Buella   schedule 04.04.2014