Альтернативы / Инструменты для #define hell C/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.

2 ответа

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

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

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

Другие вопросы по тегам