Альтернативы / Инструменты для #define hell C / Переполнение стека

В нашем проекте C / C ++ мы используем заголовок конфигурации (~ 1000 строк), который заполнен # ifdef’s и #defines

#if (defined(HW_1) || defined(SOME_TECHNOLOGY_SUPPORTED)) && defined(OTHER_TECHNOLOGY_SUPPORTED)
#define SOME_FEATURE_AVAILABLE
#endif

В нашей конфигурации сборки мы заранее определяем некоторые определения, которые передаются компилятору. Это приводит к различным определениям (например, SOME_FEATURE_AVEILABLE) в нашем заголовке конфигурации.

Поскольку наш заголовок конфигурации довольно большой, в нем также есть некоторая путаница.

Есть ли альтернативы этому #define ад?

Или есть какие-либо инструменты, которые помогают увидеть, в каком случае, какие определения установлены.

Мы разрабатываем встроенную прошивку, поэтому мы не можем заменить условную компиляцию на время выполнения if.

9

Решение

В случае, если все ваши #defineОни находятся в одном файле конфигурации, вы можете попробовать выполнить компиляцию только для препроцессора, а затем найти все определенные макросы. Например.,

$ gcc -DFEATURE1 -DFEATURE2 -E configuration.h | grep '#define'
1

Другие решения

Возможно, вы захотите прочитать и рассмотреть дизайн на основе политик C ++ (http://en.wikipedia.org/wiki/Policy-based_design), представленный Александреску в своей книге «Современный дизайн C ++».

1