C++ 获取变量的大小

C++ 获取变量的大小,c++,c,clang,C++,C,Clang,使用Clang库,是否有一些可用的方法来获取变量的大小(就像我在常规C/C++程序中使用sizeof() 我能够(这就是我想要做的)发现VarDecl,但目前我仍然无法在Clang名称空间中找到任何方法来获取我的var的大小,当前VarDecl类型的大小信息存储在与给定类型关联的TypeInfo中。 您可以通过getTypeInfo函数从ASTContext获取相应的FieldInfo对。 该对的第一个元素是以位表示的类型大小。第二个元素是以位表示的类型对齐 bool VisitVarDecl(

使用
Clang
库,是否有一些可用的方法来获取变量的大小(就像我在常规C/C++程序中使用
sizeof()


我能够(这就是我想要做的)发现
VarDecl
,但目前我仍然无法在Clang名称空间中找到任何方法来获取我的var的大小,当前
VarDecl

类型的大小信息存储在与给定类型关联的TypeInfo中。 您可以通过getTypeInfo函数从ASTContext获取相应的FieldInfo对。 该对的第一个元素是以位表示的类型大小。第二个元素是以位表示的类型对齐

bool VisitVarDecl(VarDecl *VD) {
    std::pair<uint64_t, unsigned> FieldInfo = VD->getASTContext().getTypeInfo(VD->getType());
    uint64_t TypeSize = FieldInfo.first;
    unsigned FieldAlign = FieldInfo.second;
    llvm::outs() << VD->getNameAsString() << " Size: " << TypeSize/8 << " Alignment: " << FieldAlign/8 << '\n';
}
bool VisitVarDecl(VarDecl*VD){
std::pair FieldInfo=VD->getASTContext().getTypeInfo(VD->getType());
uint64\u t TypeSize=字段信息优先;
unsigned FieldAlign=FieldInfo.second;

如果你在C或C++编译,sisiOfFor()将工作。<代码> sieOS/<代码>是一个运算符,而不是宏方法。CLAN::ASTrrordFay::GETSIZE()DOCS说它得到了记录大小。它也正确地应用于类型大小,或者变量大小?@ MFSO:OP使用解析C++文件的库,因此它不能在源代码中未声明的类型中执行<代码> SigeOs/<代码>。在CLAN的最新版本中,ASTVIEW::GETType信息也返回(当前在3.6个我自己)。但是,原则是一样的。对于未来的读者来说,
TypeInfo::Width
实际上不会产生与
siezeof(T)
相同的值,例如,在我的例子中,对于一种特定类型,前者是64,而后者是4,尽管我不知道为什么。
TypeInfo::Width
是位,
sizeof(T)
以字节为单位。这当然不能解释为什么得到64而不是32。