Я не планирую связывать библиотеку C с Python, но я хотел использовать проверенный в боевых условиях инструмент для «анализа» определений C, поэтому я выбрал CFFI и попробовал следующее. :
Начните с фиктивного файла test.h
Код: Выделить всё
typedef struct {
int a;
int b[3];
float c;
} other_struct_T;
typedef struct {
bool i;
bool j;
other_struct_T k;
} main_struct_T;
Код: Выделить всё
gcc -E -P -xc test.h -o test.preprocessed.h
Код: Выделить всё
from pathlib import Path
from cffi import FFI
u = FFI()
txt = Path("test.preprocessed.h").read_text()
u.cdef(txt)
k = u.typeof("main_struct_T")
print(k)
print(k.elements)
Но не удается на втором (и k, похоже, не содержит ни .length, ни .item, ни .relements, как и следовало ожидать от экземпляра ctype, как упоминалось здесь)
Код: Выделить всё
Traceback (most recent call last):
File "./parse_header.py", line 14, in
print(k.elements)
^^^^^^^^^^^
AttributeError: elements
Подробнее здесь: https://stackoverflow.com/questions/791 ... eader-file