【发布时间】:2017-12-09 22:48:34
【问题描述】:
我需要通过使用 LLVM 和 Clang 对其进行转换,将标头添加到已经存在的程序中。
我已经使用clang的重写器在更改函数名称和参数等方面完成了类似的事情。
但是头文件不存在于 clang 的 AST 中。我已经知道我们需要使用 PPCallbacks (https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html),但如果可能的话,我急需一些关于如何使其与重写器一起工作的示例。
或者,在第一个之前添加#include 语句
using namespace <namespace>;
也有效。我也想知道一个例子。
任何帮助将不胜感激。
【问题讨论】:
-
为什么不能在正版源文件(原
*.cc或*.cpp文件)中添加#include指令?您不需要 Clang (即使您当然可以使用复杂的静态分析技术,使用 Clang 和/或 LLVM 来确定要包含的 哪些 头文件)。我的意思是,在一些源代码的开头添加一些预处理器指令非常简单(可以使用sed完成),问题是要知道要包含的哪个头文件! -
这是我项目的一部分。我不允许手动更改文件。而且我确切地知道要包含哪个头文件!
-
但您可以自动更改文件。如果不允许更改它们,则不是添加头文件的问题,而是在翻译单元中添加声明和定义。添加的东西甚至可能不存在于任何头文件中。然后,您应该在预处理器阶段之外工作(因此头文件不再重要)
-
只是头文件的顺序很重要。所以我想在其余的头文件已经到位之后放置新的头文件。我想办法把它放在开头。
-
不,您需要并希望使用 preprocessed 形式的代码,此时头文件不再存在。或者您需要更改物理源文件,然后添加一些
#include行非常简单(并且可以自动完成,一旦您知道应该添加哪些预处理器指令以及在什么位置添加)。
标签: clang llvm header-files