Я пытаюсь научиться использовать pycparser, и во время моей практики я решил эту проблему. В основном у меня есть файл C с системным заголовком, например #include <stdio.h>
и #include <stdlib.h>
, и я хочу проанализировать его через дерево AST pycparser. Мне удалось использовать поддельные заголовки, чтобы я мог проанализировать файл, но затем у меня возникла эта проблема: теперь 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 код с настоящими заголовками?