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

Parse C Array Size with Python & 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 };

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

分号;在导致错误的定义指令方式中。