Утилита для удаления частей заголовка C на основе определений

Черт! Это не препроцессор и cpp -Eне дает хорошего результата.

Ищете небольшую утилиту командной строки, которая удаляет условно скомпилированные части файлов заголовков на основе параметров (предпочтительны параметры CLI или переменные среды, но конфигурация также подойдет).

Пример ввода:

#ifdef A
#define B 1
#else
#define B 2
#endif

Пример вывода:

#define B 2

Я нашел его однажды (что-то вроде undefили undefine), но не могу вспомнить.. Спасибо.

Ответы (2)

Я думаю, вы помните 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
Да! Я также нашел этот старый вопрос SO с кучей других предложений - stackoverflow.com/questions/525283/…

unifdefотвечает на первоначальный вопрос о воспоминании, но более современные варианты: