Черт! Это не препроцессор и cpp -E
не дает хорошего результата.
Ищете небольшую утилиту командной строки, которая удаляет условно скомпилированные части файлов заголовков на основе параметров (предпочтительны параметры CLI или переменные среды, но конфигурация также подойдет).
Пример ввода:
#ifdef A
#define B 1
#else
#define B 2
#endif
Пример вывода:
#define B 2
Я нашел его однажды (что-то вроде undef
или undefine
), но не могу вспомнить.. Спасибо.
Я думаю, вы помните unifdef . Он понимает определения, переданные в командной строке, включая арифметику. Он не анализирует определения макросов внутри файла, только условные. Он может анализировать некоторые выражения препроцессора C.
$ cat foo
#ifdef A
#define B 1
#else
#define B 2
#endif
#if A == 0x01
aye
#endif
#if B == 1
bee
#endif
$ unifdef -DA=0 foo
#define B 1
#if B == 1
bee
#endif
Роман Савельев