9

在我们的 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这个地狱有其他选择吗?

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

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

4

2 回答 2

1

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

$ gcc -DFEATURE1 -DFEATURE2 -E configuration.h | grep '#define'
于 2013-08-09T01:10:15.953 回答
1

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

于 2013-08-25T17:05:22.087 回答