我希望能够从复杂的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
我该如何实现?
答案 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进行快乐的黑客入侵!