【发布时间】:2018-10-13 13:01:00
【问题描述】:
我正在查看一个项目,它有许多由 autotools 在config.h 中生成的预处理器定义。
现在,其中一些来自早期版本的源代码,也来自已被删减且源文件不再存在的部分内容。所以 - 该文件中的一些现在没用了,不应该生成。问题是 - 哪一部分?
您可以做的一件事是在当前项目源中搜索预处理器定义的使用。我已经做到了。但是 - 有一些定义会在包含时影响其他库的标头,例如 _GNU_SOURCE
我的问题:我如何确定哪些定义(包括当前在 config.h 中被注释掉的定义)在源中包含的标头上具有潜力?
(当然,在这里我需要精确而不是召回,因为无用的#define 并不是那么糟糕,但我确实需要避免缺少定义。)
【问题讨论】:
-
有趣的问题,但我怀疑是否有令人满意的解决方案。至少当特性测试宏出现时,我想不出一种方法来知道它们是由静态分析定义的。
-
这可能很大程度上取决于您的编译器。对于
gcc,您可以使用-E -dM(而不是-c)编译您的代码,并列出预处理器知道的所有定义。 -
@JensGustedt:那对我有什么帮助?
-
@FelixPalmen:不完美的启发式算法仍然会有很大帮助。
-
我建议不要理会功能测试宏,并限制自己清理宏,您可以通过检查项目自己的源来检查它们的必要性。或者至少从那开始。您可以将其作为一个长期项目来处理功能测试宏。
标签: c build c-preprocessor autotools configure