Utilidad para quitar partes del encabezado C en función de las definiciones

¡NÓTESE BIEN! Esto no es un preprocesador y cpp -Eno crea un buen resultado.

Buscando una pequeña utilidad de línea de comando, que elimine partes compiladas condicionalmente de los archivos de encabezado, en función de los parámetros (se prefieren los parámetros CLI o las variables de entorno, pero una configuración también funcionaría).

Ejemplo de entrada:

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

Salida de ejemplo:

#define B 2

Lo encontré una vez (algo así como undefo undefine), pero no puedo recordarlo... Gracias.

Respuestas (2)

Creo que te acuerdas de unifdef . Entiende las definiciones pasadas en la línea de comandos, incluida la aritmética. No analiza definiciones de macro dentro del archivo, solo condicionales. Puede analizar algunas expresiones de preprocesador de 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
¡Sí! También localicé esta vieja pregunta SO con un montón de otras propuestas: stackoverflow.com/questions/525283/…

unifdefresponde a la pregunta inicial de recuerdo, pero las opciones más contemporáneas son: