libclang:如何从funcdecl获取函数主体?

时间:2018-11-27 01:43:26

标签: clang libclang

我是Clang的新手,如果这是一个愚蠢的问题,请原谅我:)

遍历AST时,我只能得到那些CXCursor_FunctionDecl。我正在寻找一种获取函数主体(又称Stmt)的方法。我知道Clang中有一个getbody()方法,但是libclang C API中公开的对应接口在哪里?

编辑:

事实证明,这实际上不是libclang的限制。解析nuklear.h(仅用于标头的c89库)时,我忘记在标头的开头添加#define NK_IMPLEMENTATION,因此它不会给我函数体。我应该删除/关闭这个问题吗?

1 个答案:

答案 0 :(得分:1)

根据libClang

  

与Clang的C接口永远不会提供存储在Clang的C ++ AST中的所有信息>表示,也不应该:目的是要维护从一个版本到下一个版本相对稳定的API,仅提供支持开发工具所需的基本功能

Eli Bendersky

  

要了解出现此限制的原因,思考libclang的主要目标具有建设性。目前,该API的主要用途是在IDE中,我们希望>了解有关类型和对符号的引用的所有信息,但不必特别在意我们看到的是哪种语句或表达式。

这可能是使用libclang的局限性之一。

替代方案可能使用ASTMatcher或编写了RecursiveASTVisitor