【问题标题】:How to get the variable and its size after Declaration?声明后如何获取变量及其大小?
【发布时间】:2019-08-26 06:23:44
【问题描述】:

我正在研究 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,名称为数组。 如果有任何解决方案,请建议我。

【问题讨论】:

  • 如何在看到声明时保存有关数组的信息,并在使用时从自己的内部缓存中获取信息?

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


【解决方案1】:

旧式 C 数组恰好有这个缺点:当您传递数组(作为指针/地址)时,会丢失多长时间的信息。

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

如果预先知道大小和常量,则使用 STL std::array,如果必须动态增长,则使用 std::vector。他们总是知道自己有多大。

特别是,忘记 char[],对所有文本使用 std::string。

【讨论】:

    猜你喜欢
    • 2020-04-18
    • 2012-10-14
    • 2020-07-31
    • 1970-01-01
    • 2019-10-24
    • 2011-02-21
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多