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"
                       ;