gpt4 book ai didi

c++ - CLang Libtooling:在 clang::VarDecl、clang::FieldDecl 或 clang::ParmVarDecl 中获取变量的数据类型

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

我正在研究 CLang 3.5。我正在尝试获取有关在 C++ 项目中声明的变量的信息。

如何获取 clang::VarDecl 中变量的数据类型或限定类名, clang::FieldDeclclang::ParmVarDecl目的?我试图在 clang::VarDecl 的文档中找到一个可以返回变量的数据类型或类名的函数此处提供。

http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html

我还尝试查看 $LLVM/tools/clang/tools/clang-check/ClangCheck.cpp 的代码因为在传递 cmd arg --ast-dump 时它显示了关于每个 AST 节点的所有信息,包括声明的所有变量。我想知道如何访问所有这些信息。

我正在使用 ASTMatchers要找到我的变量声明,它们是:

fieldDecl().bind("field")
parmVarDecl().bind("param")
varDecl().bind("var")

谁能告诉我如何获取所有已声明变量的数据类型?

最佳答案

最近在学习Clang,看了这道题也写了一些代码。它可能对您有所帮助。

完整的源代码可以在 github.com 中找到。(见 ex04.cc)

DeclarationMatcher FieldDeclMatcher =
clang::ast_matchers::fieldDecl().bind("field_decl");

class LoopPrinter : public MatchFinder::MatchCallback
{
public :
virtual void run(const MatchFinder::MatchResult& result)
{
if (const clang::FieldDecl* fd
= result.Nodes.getNodeAs<clang::FieldDecl>("field_decl"))
{
std::cout << "======== FieldDecl found ======" << std::endl;

const clang::RecordDecl* rd = fd->getParent();
const clang::QualType qt = fd->getType();
const clang::Type* t = qt.getTypePtr();

std::cout << "FieldDecl found '"
<< fd->getQualifiedNameAsString() << " "
<< fd->getName().str() << "' in '"
<< rd->getName().str() << "'. "
<< "is Builtintype = " << t->isBuiltinType() << " "
<< std::endl << std::endl;
}

} // end of run()
};

关于c++ - CLang Libtooling:在 clang::VarDecl、clang::FieldDecl 或 clang::ParmVarDecl 中获取变量的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20719834/

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