0

我正在尝试学习如何使用 pycparser,在我的练习中,我遇到了这个问题。基本上我有一个带有系统头文件的 C 文件,#include <stdio.h>#include <stdlib.h>想通过 pycparser ast 树来分析它。我成功地使用了假标题,所以我可以解析文件,但后来我遇到了这个问题:ast 现在包含很多 typedef 并且不包含真正的标题,所以在我将 ast 打印到文件中以获得我的 c代码返回,它无法编译,因为缺少真正的头文件。

例如这个文件:

#include <stdlib.h>
#include <stdio.h>

typedef struct {
    //my struct
} NODE;

int main() {
    //do stuff

    return 0;
}

变成这样:

typedef int size_t;
typedef int __builtin_va_list;
typedef int __gnuc_va_list;
typedef int va_list;
typedef int __int8_t;
....
typedef int __uint64_t;
typedef int __int_least32_t;
typedef int __uint_least32_t;
....
typedef struct xcb_connection_t xcb_connection_t;
typedef uint32_t xcb_window_t;
typedef uint32_t xcb_visualid_t;
//a lot of typedef

typedef struct {
    //my struct
} NODE;

int main() {
    //do stuff

    return 0;
}

做我的研究,我看到#include <stdlib.h>包含以下几行:

#include "_fake_defines.h"
#include "_fake_typedefs.h"

并且这些标题包含出现在我的文件中的所有 typedef。

有没有办法用真正的标题打印回 c 代码?

4

0 回答 0