声明后如何获取变量及其大小?

时间:2019-08-26 06:23:44

标签: c++ clang llvm abstract-syntax-tree

我正在研究clang Libtooling。

我想在再次使用数组时获取有关数组及其大小的信息。 我在实现它方面遇到困难。

这是我的测试文件

void test()
{
int array[5];
array[4]=8;
}

到目前为止,我能够在第3行获得类似数组名称及其大小之类的信息

我用过的尺寸

if (const VarDecl *D = Result.Nodes.getNodeAs<clang::VarDecl> ("gotit")){

    auto t =  dyn_cast_or_null<ConstantArrayType>(D->getType().getTypePtr());           
    const llvm::APInt a = t->getSize();
    llvm::outs() << a;
    llvm::outs()<< "\n";
    llvm::outs()<< " array name is : " << D->getNameAsString();     
    }   

但是我如何获得第4行的信息。

像大小是4,名称是array。 请建议我是否有解决方案。

1 个答案:

答案 0 :(得分:-1)

旧式的C数组确实具有以下缺点:当您传递数组(作为指针/地址)时,丢失的信息会持续多长时间。

我个人建议不要再使用它们。

如果预先知道大小,则使用STL std :: array;如果必须动态增长,则使用std :: vector。他们一直知道自己有多大。

尤其要忘记char [],对所有文本都使用std :: string。