2011-10-08 34 views
6

Vorrei sapere se v'è alcun tipo di espansione espressioni regolari all'interno del compilatore (GCC) processore pre. Macro di generazione di codice sostanzialmente più flessibili.Le espressioni regolari in C preprocessore macro

Se non c'è un modo, come si fa suggeriscono che ottenere lo stesso risultato

+0

Qualcuno potrebbe sapere di una soluzione alternativa se ha fornito maggiori dettagli sul problema reale. – krs1

+0

Ho più casi in cui è utile tale cosa. Ad esempio, prendere un gruppo di membri di enum e creare automaticamente un'istruzione switch in modo che anche se un membro viene aggiunto, il codice viene aggiornato con un'implementazione predefinita o con un #error. Se trovate questa è un'informazione molto importante che lo metterà nella questione –

+0

@aiwarrior - per il problema sopra indicato - si potrebbe usare [X-macro] (http://en.wikibooks.org/wiki/C_Programming/Preprocessor # X-Macros) trucco per generare complessivamente ENUM e SWITCH. Inoltre puoi leggere su x-macros in questo [e-book] (http://www.keithschwarz.com/coursereader.pdf) - pagina 173 - "Applicazioni pratiche del preprocessore II: X Macro Trick". –

risposta

5

Il preprocessore C non può farlo.

È possibile utilizzare un processore di modello (ad esempio Mustache ma ce ne sono molti altri) che genera ciò che è necessario prima di passarlo al compilatore.

+0

questo è davvero qualcosa che non ho mai sentito e sembra che sarebbe di grande aiuto. Aspetterò qualche altra risposta per vedere se c'è un'altra soluzione –

1

Inoltre, se si sta progettando un progetto più grande e sai questa funzione sarà utile si potrebbe desiderare di scrivere il proprio preprocessore che è possibile eseguire automaticamente da qualche sistema di compilazione. Un buon esempio di tale soluzione sarebbe moc che migliora C++ ai fini del framework Qt. Il purista potrebbe ovviamente non essere d'accordo.

+0

Non sono purista e non sono d'accordo. qmake non ha nulla a che fare con la pre-elaborazione di C++ di Qt. È moc! doc.qt.nokia.com/latest/moc.html –

+0

mentre io non sono d'accordo con il modo in cui lavora opaca qmake per quanto riguarda il linguaggio stesso che avrei un progetto in sé e non ho bisogno di tanta potenza di fuoco –

+0

Naturalmente pensavo moc .. mio male! Bisogno di dormire di più. ;-) – RushPL

0

c'è questa https://github.com/graph/qc qc = C rapida permette di fare questo nel vostro file di codice sorgente che terminano 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 

E il risultato sarà una cpp & a questo è .h pre-elaborati. È fatto per evitare la necessità di mantenere i file di intestazione. E alcune altre cose non rendono il retrocompatibile con C++, ma emette codice C++ in modo da poter fare tutte le cose C++ che vuoi alla fine della giornata.

Edit: ho fatto e hanno una polarizzazione verso qc.

0

Si potrebbe desiderare di guardare re2c.org. Si tratta di un preprocessore C separato per generare il codice C in modo che corrisponda alle espressioni regolari. Ho trovato questo e la tua domanda quando cerchi qualcosa di simile a .