2

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

如何获取 a或objectclang::VarDecl中变量的数据类型或限定类名?我试图找到一个函数,它可以在此处提供的文档中返回变量的数据类型或类名。clang::FieldDeclclang::ParmVarDeclclang::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")

谁能告诉我如何获得所有变量的数据类型?

4

1 回答 1

1

最近在学习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()
};
于 2014-08-03T09:31:28.250 回答