0

我希望能够从复杂的 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

我想收到的是这个

无符号整数 * p_uint_var

我怎样才能做到这一点?

4

1 回答 1

0

您正在寻找的是规范类型。在这个问题中,您可以阅读Clang 中的规范类型以及涉及它的不同情况。

将其转换为实际代码,我们得到:

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

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

unsigned int * p_uint_var

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

我希望这些信息有用。与 Clang 一起愉快地黑客攻击!

于 2019-06-13T19:14:06.793 回答