#define hell C / C ++的替代/工具

时间:2013-08-08 10:25:52

标签: c++ c c-preprocessor buildconfiguration

在我们的C / C ++项目中,我们使用一个充满#ifdef和#defines

的配置头(~1000行)
#if (defined(HW_1) || defined(SOME_TECHNOLOGY_SUPPORTED)) && defined(OTHER_TECHNOLOGY_SUPPORTED)
 #define SOME_FEATURE_AVAILABLE
#endif

在我们的构建配置中,我们预定义了一些传递给编译器的定义。这会在我们的配置头中产生不同的定义(如SOME_FEATURE_AVEILABLE)。

由于我们的配置标头非常大,所以也有点混乱。

这个#define地狱还有其他选择吗?

或者是否有任何工具可以帮助查看在何种情况下设置了哪些定义。

我们正在开发嵌入式固件,因此我们无法通过运行时替换条件编译。

2 个答案:

答案 0 :(得分:1)

如果您的所有#define都在一个配置文件中,您可以尝试执行仅预处理器编译,然后查找所有已定义的宏。如,

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

答案 1 :(得分:1)

您可能希望阅读并考虑Alexandrescu在其“Modern C ++ Design”一书中介绍的基于C ++策略的设计(http://en.wikipedia.org/wiki/Policy-based_design)。