如何使用clang将复杂的typedef扩展为其基本的内置形式?

时间:2019-06-13 14:18:12

标签: c++ clang libtooling

我希望能够从复杂的typedef中获取原始类型。 我正在使用clang版本7.1.0

看下面的代码

typedef unsigned int uint32;
typedef uint32 * p_uint32;

p_uint32 p_uint_var;

我可以使用p_uint_var提取VisitVarDecl的类型

virtual bool VisitVarDecl(VarDecl *var)
{
    if(var->hasGlobalStorage())
    {
        llvm::outs() << var->getType().getAsString() << " " << var->getName() << "\n";
    }

    return true;
}

我得到的输出是这个

  

p_uint32 p_uint_var

我想收到的是这个

  

unsigned int * p_uint_var

我该如何实现?

1 个答案:

答案 0 :(得分:0)

您要查找的是规范类型。在this question中,您可以了解有关Clang中的规范类型及其涉及的不同情况。

将其转换为实际代码,我们得到以下信息:

bool VisitVarDecl(VarDecl *Var) {
  llvm::outs() << Var->getType().getCanonicalType().getAsString() << " "
               << Var->getName() << "\n";
  return true;
}

此代码为您的代码段生成以下输出:

unsigned int * p_uint_var

注意:请勿将访问功能设为虚拟。所有Clang访问者类都是CRTP

我希望这些信息有用。使用Clang进行快乐的黑客入侵!