0

我正在研究clang libtooling。

到目前为止,我设法通过visitDeclRefExpr(DeclRefExpr *DR)

但是我可以得到一个宏列表,其名称和扩展为字符串。

示例程序.c

#define abc ab

#define sum 0

int main()
{
int ab;
abc  = abc + 0;
return 0;
}

我可以得到如下输出吗

abc -- ab

sum -- 0

如何使用 clang libtooling 实现此输出。如何使用 clang libtooling 实现?

请让我知道是否有解决此问题的方法。

4

1 回答 1

3

不幸的是,在 AST 中,Clang 存储了关于宏的最少信息。SourceLocation包含一些关于在那里扩展了哪些宏的信息。您可以在此处找到有关位置和宏扩展的更多信息。

为了访问宏定义和扩展(可以说是在访问 AST 节点时访问它们),您需要使用 Clang 的预处理器。PPCalbacks是正确的工具。您可以PreprocessorCompilerInstance( CompilerInstance::getPreprocessor ) 获取并将您的回调挂钩到其中。

我希望这些信息有用。与 Clang 一起愉快地黑客攻击!

于 2019-11-01T10:56:01.257 回答