【问题标题】:How to get the macro and its expansion with clang libtooling?如何使用 clang libtooling 获取宏及其扩展?
【发布时间】:2019-10-30 06:55:46
【问题描述】:

我正在研究 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 实现?

如果有解决此问题的方法,请告诉我。

【问题讨论】:

    标签: c++ clang llvm libtooling


    【解决方案1】:

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

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

    我希望这些信息有用。愉快地使用 Clang 进行黑客攻击!

    【讨论】:

    • 是否可以从序列化的 AST 中检索宏信息?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多