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

#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); } { return (i) + (j); }

来自keyboardsmoke的答案:已测试过

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

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

#1楼 票数:1 已采纳

一种简单的方法是使用Decl内部的'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”

  ask by Lei Yu translate from so

未解决问题?本站智能推荐:

1回复

使用Clang获取函数定义

我想使用clang从cpp文件中获取函数名称。 我找到了一些教程,但是执行“ make”时总是收到此错误: / usr / bin / ld:错误:../../lib/libLLVMSelectionDAG.a:ELF节名称超出范围collect2:错误:ld返回1退出状态工具/lt
2回复

如何使用clang从TagDecl获取结构成员

我有一个AST消费者,可以获得所有结构的TagDecl 如何在类似FunctionDecl类的数组中获取结构(声明,类型)的成员: 还是以其他方式?
6回复

Clang 看不到基本标题

我尝试使用 Clang 在 Fedora 20 上编译简单的 hello world,得到以下输出: d.cpp:1:10: 致命错误:找不到“iostream”文件 #include <iostream> 我不知道如何解决它。
1回复

Clang -Wweak-vtables和纯抽象类

关于此主题的先前问题: 这是我最近提出的问题的后续跟进: clang:没有外线虚拟方法定义(纯抽象C ++类) ,并且被标记为此问题的副本: clang的-Wweak-含义是什么?虚函数表? 。 我不认为那回答了我的问题,所以在这里我专注于困扰我的事情,但尚未得到回答。 我的情景
4回复

clang:没有离线虚拟方法定义(纯抽象C ++类)

我正在尝试使用Clang-3.5编译以下简单的C ++代码: test.h: test.cc: 我用于编译此命令的命令(Linux,uname -r:3.16.0-4-amd64): 和我得到的错误: 有什么暗示为什么发出警告吗? 虚拟析构函数根本没有内联
1回复

如何禁用clang ++中的自动“按指针传递”优化?

我有一个功能 当我编译它时,我看到那个clang将其签名更改为 这很不方便,因为我直接从某些llvm IR代码中使用此功能。 如何禁止它进行此优化? 编辑:最小的工作示例: 通过以下命令行: 该Function翻译为:
1回复

Clang为使用的类型别名发出“未使用的类型别名”警告

我有一些Clang正在生成警告的代码。 这从实际代码中简化,但精神是相同的。 本地类中的this_t用于实例化其他一些模板类。 template<class T> struct value_holder { T value; }; template<class
1回复

可以使用Clang AST打印名称的QualType函数指针吗?

是否有任何简单可靠的方法( QualType正则表达式)将函数指针声明的QualType作为字符串但附加了名称? 我试图利用QualType::getAsString(const PrintingPolicy &Policy) ,但遗憾的是,该配置没有选项。 例如 int