【问题标题】:Parse C Array Size with Python & LibClang使用 Python 和 LibClang 解析 C 数组大小
【发布时间】:2015-05-05 09:41:06
【问题描述】:

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

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

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

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

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

实际上解析器在 MAX 处停止,在转储中出现错误:invalid sloc。

我该如何解决这个问题?

谢谢

【问题讨论】:

    标签: python c arrays parsing libclang


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

    • 感谢您的回复,事实上,错误比我想象的要简单得多。定义中的分号导致错误。无论如何,感谢您的宝贵时间。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      相关资源
      最近更新 更多