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

标签 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 行的信息。

比如size是4,name是array。 如果有任何解决方案,请建议我。

最佳答案

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

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

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

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

关于c++ - 声明后如何获取变量及其大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57652730/

相关文章:

c++ - QT运行SAPI报错

c++ - 当绑定(bind)发生在另一个函数中时,Sqlite _only_ 找不到行

c++ - 注入(inject)的类名编译器差异

C++ 编译器为 AVX SIMD 代码中从自身减去 +-Infinity 或 +-NaN 的恒定传播给出不同的 NaN 符号

swift - Swift 中的重写属性问题

模板数组中的 C++ 堆损坏

c++ - 非自愿上下文切换 : How can I prevent them?

c++ - Clang 和 GCC 在解析可变函数模板重载时的不同行为

macos - 如何使用 LLVM 在 MacOS 上构建 ELF?

c++ - 如何在 LLVM 中调用函数