python - 使用 Python 和 LibClang 解析 C 数组大小

标签 python c arrays parsing libclang

我目前正在使用 Python 通过 LibClang 解析 C 文件。我在读取大小由定义指令变量定义的 C 数组时遇到问题。

使用 node.get_children 我可以完美读取以下数组:

int myarray[20][30][10];

一旦将数组大小替换为变量,就无法正确读取数组。以下数组代码无法读取。

#define MAX 60;
int myarray[MAX][30][10];

实际上解析器在 MAX 处停止并且在转储中有错误:无效的 sloc。

我该如何解决这个问题?

谢谢

最佳答案

在尝试解析之前通过 C 预处理器运行代码。这将导致所有预处理器符号被它们的值替换,即您的 [MAX] 将变为 [60]

请注意,C 代码也可以这样做:

const int three[] = { 1, 2, 3 };

即让编译器根据给定的初始化值的数量推导出数组的长度。

或者,从 C99 开始,甚至这样:

const int hundred[] = { [99] = 4711 };

所以天真的方法可能仍然会失败,但我当然对您使用的解析器的功能一无所知。

关于python - 使用 Python 和 LibClang 解析 C 数组大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30049387/

相关文章:

c - 具有大量输入文件的 C 程序的最佳实践

c - ClientHello 消息 ssl 中的 ProtocolVersion

python - 如何将二维数组转换为 python 3 中的元组?

c - 这个数组与动态分配的数组有何不同

php - 如何在smarty中打印数组?

python - 类型错误 : mat data type = 0 is not supported

python - Tornado 异步队列不等待

c - 编译库与仅在应用程序中使用其源文件之间的区别

Python:当 cls 不是 float 时,为什么 float.__new__(cls) 可以工作?

python - SQLAlchemy Session add()返回值