我想知道是否有可能找到VarDecl是否在函数中初始化,如果是,则将该函数名作为FunctionDecl或字符串获取。

香港专业教育学院浏览http://clang.llvm.org/doxygen/classclang_1_1ValueDecl.html,但我找不到任何东西。任何帮助,将不胜感激。

    ///This function will be called whenever a variable is found in the ASTReader
  static void RegisterVarDecl(void *v)
  {
    VarDecl* var = (VarDecl*)v;
    if (var->isLocalVarDecl()){
      variables_.push_back(new string(var->getNameAsString().c_str()));
    }
  }

这很好地为我返回了变量名
  static void RegisterFunctionDecl(void * v)
  {
    FunctionDecl* func = (FunctionDecl*)v;
    funcs_.push_back(new string(func->getNameInfo().getName().getAsString()));
    if (func->getNumParams() > 0){
      for (int i = 0; i < func->getNumParams(); ++i){
        params_.push_back(new string(func->getParamDecl(i)->getNameAsString()));
      }
    }
    num_params_.push_back(func->getNumParams());
  }

返回函数和该函数的参数。

我想知道在FunctionDecl中是否有一种方法可以指定内部存在哪些VarDecls,或者是否可以找到VarDecl所属的FunctionDecl。

最佳答案

VarDecl Decl 的子类,它具有函数 getParentFunctionOrMethod() 。此函数返回 DeclContext * ,它是 FunctionDecl 的父类(super class)。要将DeclContext *下调为FunctionDecl *,您应该使用llvm/Support/Casting.h中的函数。

关于c++ - 有什么办法找到VarDecl的功能吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28258766/

10-09 06:32