2011-10-08 21 views
6

Me gustaría saber si hay algún tipo de expansión de expresiones regulares dentro del compilador (GCC) pre procesador. Macros de generación de código básicamente más flexibles.Las expresiones regulares en C preprocesador macro

Si no hay una forma, ¿cómo sugieres que conseguir el mismo resultado

+0

Alguien podría saber de una solución si dio más detalles del problema real. – krs1

+0

Tengo varios casos donde es útil tal cosa. Por ejemplo, tomar un grupo de miembros enum y crear automáticamente una declaración de conmutación de los mismos para que, incluso si se agrega un miembro, el código se actualiza con una implementación predeterminada o con un # error. Si encuentras esta información es muy importante que lo pondrá en la pregunta –

+0

@aiwarrior - para su problema especificado anteriormente - se puede utilizar [X-macro] (http://en.wikibooks.org/wiki/C_Programming/Preprocessor # X-Macros) truco para generar declaraciones ENUM y SWITCH juntas. También puede leer sobre x-macros en este [e-book] (http://www.keithschwarz.com/coursereader.pdf) - página 173 - "Aplicaciones prácticas del preprocesador II: el truco macro X". –

Respuesta

5

El preprocesador de C no puede hacer eso.

Es posible que desee utilizar un procesador de plantilla (por ejemplo Mustache pero hay muchos otros) que genera lo que necesita antes de pasarlo al compilador.

+0

esto es de hecho algo de lo que nunca he oído hablar y parece que ayudaría mucho. Esperaré algunas respuestas más para ver si hay otra solución –

1

Además, si usted está planeando un proyecto más grande y sabes esta función será beneficioso es posible que desee escribir su propio preprocesador que se puede ejecutar de forma automática desde algún sistema de construcción. Un buen ejemplo de dicha solución sería moc que mejora C++ para Qt framework. Los puristas pueden, por supuesto, estar en desacuerdo.

+0

No soy purista y no estoy de acuerdo. qmake no tiene nada que ver con el preprocesamiento de C++ de Qt. ¡Es moc! doc.qt.nokia.com/latest/moc.html –

+0

mientras yo no estoy de acuerdo con la forma opaca qmake trabaja en lo que se refiere a la lengua misma que habría un proyecto en sí mismo y no necesito tanta potencia de fuego –

+0

Por supuesto que estaba pensando moc ... ¡mi mal! Necesito dormir más. ;-) – RushPL

0

hay esta https://github.com/graph/qc qc = C rápida que le permite hacer esto en los archivos de código fuente que terminan con qc.h

$replace asdf_(\d+) => asdf_ :) $1 blabla 

// and now in your code anything that matches the above regular expression 
asdf_123 
// will become asdf_ :) 123 blabla 

y va a emitir una .cpp & a eso .h preprocesados. Está hecho para evitar la necesidad de mantener archivos de encabezado. Y algunas otras cosas que no lo hacen compatible con C++, pero genera un código C++ para que pueda hacer todas las cosas de C++ que desee al final del día.

Editar: Lo hice y tengo un sesgo hacia la CC.

0

Es posible que desee ver en re2c.org. Es un preprocesador C separado para generar el código C para que coincida con las expresiones regulares. Encontré eso y tu pregunta al buscar algo similar.

Cuestiones relacionadas