I often have to write code in other languages that interact with C structs. Most typically this involves writing Python code with the struct or ctypes modules.
So I’ll have a .h file full of struct definitions, and I have to manually read through them and duplicate those definitions in my Python code. This is time consuming and error-prone, and it’s difficult to keep the two definitions in sync when they change frequently.
Is there some tool or library in any language (doesn’t have to be C or Python) which can take a .h file and produce a structured list of its structs and their fields? I’d love to be able to write a script to generate my automatically generate my struct definitions in Python, and I don’t want to have to process arbitrary C code to do it. Regular expressions would work great about 90% of the time and then cause endless headaches for the remaining 10%.
If you compile your C code with debugging (
-g), pahole (git) can give you the exact structure layouts being used.$ pahole /bin/dd … struct option { const char * name; /* 0 8 */ int has_arg; /* 8 4 */ /* XXX 4 bytes hole, try to pack */ int * flag; /* 16 8 */ int val; /* 24 4 */ /* size: 32, cachelines: 1, members: 4 */ /* sum members: 24, holes: 1, sum holes: 4 */ /* padding: 4 */ /* last cacheline: 32 bytes */ }; …This should be quite a lot nicer to parse than straight C.