使用 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 };
所以天真的方法可能仍然会失败,但我当然对您使用的解析器的功能一无所知。
分号;在导致错误的定义指令方式中。
我目前正在使用 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 };
所以天真的方法可能仍然会失败,但我当然对您使用的解析器的功能一无所知。
分号;在导致错误的定义指令方式中。