首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ParmVarDecl:获取clang::VarDecl、clang::FieldDecl或clang::ParmVarDecl中变量的数据类型

ParmVarDecl:获取clang::VarDecl、clang::FieldDecl或clang::ParmVarDecl中变量的数据类型
EN

Stack Overflow用户
提问于 2013-12-21 22:10:03
回答 1查看 2.8K关注 0票数 2

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

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

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

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

我使用ASTMatchers来查找我的变量声明,它们是:

代码语言:javascript
复制
fieldDecl().bind("field")
parmVarDecl().bind("param")
varDecl().bind("var")

谁能告诉我怎样才能得到所有delcared变量的数据类型?

EN

回答 1

Stack Overflow用户

发布于 2014-08-03 17:31:28

最近,我正在学习Clang,在读完这个问题后,我写了一些代码。这可能会对你有帮助。

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

代码语言:javascript
复制
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()
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20719834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档