Структуры данных C - хранение представления двоичного дерева

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

Эти структуры будут исправлены на время работы программы, однако я хотел бы, чтобы опция во время компиляции позволяла быстро изменять структуру используемых деревьев. Что-то, надеюсь, более элегантное и легко реконфигурируемое, чем, скажем, функция или макрос для каждого задействованного дерева, который многократно вызывает функцию «AddNode» в правильном порядке для каждого базового элемента данных и узла дерева. Спасибо за любые предложения!


person Bitrex    schedule 14.10.2012    source источник
comment
Как насчет создания текстового представления дерева и сохранения его в виде строки, а затем анализа для построения дерева? Затем вы можете переключить, какая строка используется во время компиляции.   -  person Vaughn Cato    schedule 14.10.2012
comment
Обычно я использовал утилиты, которые создавали образ структуры в памяти либо непосредственно в двоичном виде, либо символически, с исправлениями, выполненными либо компоновщиком, либо утилитой.   -  person Dave Newton    schedule 14.10.2012
comment
Спасибо - оба эти предложения являются привлекательными.   -  person Bitrex    schedule 14.10.2012


Ответы (1)


Как насчет использования препроцессора M4 для реализации псевдоязыка высокого уровня для генерации кода C, необходимого для построения деревьев? В вашем коде может быть функция с именем, например, initTrees(), тело которой будет автоматически сгенерировано M4 из файла, содержимое которого будет описанием желаемой древовидной структуры. Общий процесс будет следующим:

sample.c.m4 ---> [M4] ---> sample.c ---> [компилятор C] ---> Двоичный файл

http://www.gnu.org/software/m4/

http://en.wikipedia.org/wiki/M4_(computer_language)

person Claudix    schedule 14.10.2012
comment
Спасибо, это, безусловно, заслуживает внимания! - person Bitrex; 14.10.2012