Создание массива поиска во время компиляции для ANSI-C? - PullRequest
3 голосов
/ 18 марта 2010

Предыдущий программист предпочитал генерировать большие справочные таблицы (массивы констант) для сохранения циклов ЦП во время выполнения, а не для вычисления значений на лету. Он сделал это, создавая собственные проекты Visual C ++, которые были уникальными для каждой отдельной таблицы поиска ... которые генерировали файлы массивов, которые затем включались в совершенно отдельный проект микроконтроллера ANSI-C (Renesas).

Этот подход подходит для его первоначальных предположений о вычислениях, но он становится утомительным, когда необходимо изменить входные параметры, требуя от меня перекомпиляции всех проектов Visual C ++ и повторного импорта этих файлов в проект ANSI-C. Я хотел бы перенести исходный код Visual C ++ непосредственно в проект микроконтроллера ANSI-C и позволить компилятору создавать таблицы массивов.

Итак, мой вопрос: могут ли компиляторы ANSI-C вычислять и генерировать массивы поиска во время компиляции? И если так, как я должен идти об этом?

Заранее спасибо за помощь!

Ответы [ 3 ]

4 голосов
/ 18 марта 2010

Есть ли причина, по которой вы не можете импортировать его архитектуру генерации кода в вашу систему сборки?

Я имею в виду, что в make я мог бы рассмотреть что-то вроде:

TABLES:=$(wildcard table_*)
TABLE_INCS:=$(foreach dir,$TABLES,$dir/$dir.h)
include $(foreach dir,$TABLES,dir/makefile.inc)

$MAIN: $(SRS) $(TABLE_INCS)

, где каждый table_* содержит полный проект генерации кода, единственной целью которого является сборка table_n/table_n.h. Также в каждом каталоге таблицы есть фрагмент make-файла с именем makefile.inc, который предоставляет строки зависимостей для сгенерированных включаемых файлов, и теперь я удалил рекурсивность.

Сделано правильно (и эта реализация не закончена, отчасти потому, что суть понятнее, но в основном потому, что я ленивый), вы можете отредактировать table_3/table_3.input, набрать make в главном каталоге и получить table_3 / Таблица_3.h перестроена, и программа постепенно перекомпилирована.

1 голос
/ 18 марта 2010

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

0 голосов
/ 20 июня 2010

Проверьте библиотеку препроцессора Boost. Он написан для C ++, но, насколько я знаю, два препроцессора в значительной степени идентичны, и он может делать подобные вещи.

...