c++ - #define hell C/C++ 的替代品/工具

标签 c++ c c-preprocessor buildconfiguration

在我们的 C/C++ 项目中,我们使用一个充满#ifdef 和#defines 的配置 header (~1000 行)

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

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

由于我们的配置头很大,所以也有点乱。

对于这个#define hell ,是否有任何替代方案?

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

我们正在开发嵌入式固件,所以我们不能用运行时 if 来代替条件编译。

最佳答案

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

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

关于c++ - #define hell C/C++ 的替代品/工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18123635/

相关文章:

c++ - 在 C++ 中使用 vector vector (二维 vector )的邻接表表示

c++ - 如何将现有的分布式服务应用移植到DCOS?

c - strtok:获取分隔符之前的值,而不仅仅是之后的值

c++ - 当我在 C++ 中将 float 变量分配给 int 变量时会发生什么?

c++ - 从 MFC 中的配置文件加载字符串

c - 返回结构的函数名

c - 调用图如何解析函数指针?

Objective-C:前向类声明

function - 为什么宏比同等定义的函数占用更多空间?

c++ - 如何在运行时检测 C 中的操作系统