В нашем проекте 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.
В случае, если все ваши #define
Они находятся в одном файле конфигурации, вы можете попробовать выполнить компиляцию только для препроцессора, а затем найти все определенные макросы. Например.,
$ gcc -DFEATURE1 -DFEATURE2 -E configuration.h | grep '#define'
Возможно, вы захотите прочитать и рассмотреть дизайн на основе политик C ++ (http://en.wikipedia.org/wiki/Policy-based_design), представленный Александреску в своей книге «Современный дизайн C ++».