gpt4 book ai didi

c++ - 有没有一种方法可以使用 Clang API 扩展宏来获取源代码

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:15:17 24 4
gpt4 key购买 nike

例如,我得到了以下代码。

#define ADD(x, y) (x) + (y) 

int func(int i, int j)
{
return ADD(i, j);
}

可以使用 clang SourceManager 获取函数 func 的源代码。我得到的是 { return ADD(i, j)。有什么方法可以获取源代码 { return (i) + (j); } ?

keyboardsmoke 的回答:已测试

可以简单地使用 Decl::print() 方法,或者这个答案中 keyboardsmoke 的代码,实际上, Decl::print() 调用 DeclPrinter 的方法。

Stmt 有一个名为 printPretty() 的不同方法,它可以打印出扩展了宏的语句的源代码。

最佳答案

一个简单的方法是使用 Decl 中的 'print' 函数, pretty-print 将展开所有宏。

您还可以打印语句,因此如果您想要返回特定的语句,您应该能够执行类似的操作。

Decl::print 也指“DeclPrinter”,它允许您打印任何 decl 类型(输出到 raw_ostream)

std::string s;
llvm::raw_string_ostream sos(s);
PrintingPolicy pp(compiler->getLangOpts());
pp.adjustForCPlusPlus();
DeclPrinter DP(sos, pp, 0 /* indent */, true /* PrintInstantiation */);
DP.Visit(functionDecl);

将“functionDecl”的文本放入“std::string s”

关于c++ - 有没有一种方法可以使用 Clang API 扩展宏来获取源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39529480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com