Alexander Shiryaev писал(а):
Генераторы проще всего было писать на С, т. к. не нужно парсить заголовочные файлы, а они все на C.
Парсить, на мой взгляд, проще не заголовочные файлы, а освобожденную от макросов и условной компиляции выдачу препроцессора.
Код:
$ cat mkioctl.cpp
#include <sys/ioctl.h>
CONST
_FIOCLEX = FIOCLEX;
_FIONCLEX = FIONCLEX;
Код:
$ cpp mkioctl.cpp
...
# 27 "/usr/include/x86_64-linux-gnu/bits/ioctl-types.h" 3 4
struct winsize
{
unsigned short int ws_row;
unsigned short int ws_col;
unsigned short int ws_xpixel;
unsigned short int ws_ypixel;
};
struct termio
{
unsigned short int c_iflag;
unsigned short int c_oflag;
unsigned short int c_cflag;
unsigned short int c_lflag;
unsigned char c_line;
unsigned char c_cc[8];
};
# 30 "/usr/include/x86_64-linux-gnu/sys/ioctl.h" 2 3 4
...
extern int ioctl (int __fd, unsigned long int __request, ...) throw ();
}
# 2 "mkioctl.cpp" 2
# 3 "mkioctl.cpp"
CONST
_FIOCLEX =
# 4 "mkioctl.cpp" 3 4
0x5451
# 4 "mkioctl.cpp"
;
_FIONCLEX =
# 5 "mkioctl.cpp" 3 4
0x5450
# 5 "mkioctl.cpp"
;