2012-05-29 13 views
8

Come posso convertire automaticamente il codice sorgente c99 in c89? Voglio compilare le librerie c99 con Visual C++, ma MSVC supporta solo c89. Molte modifiche sono solo sintattiche, come gli inizializzatori di struct e potresti scrivere uno strumento automaticamente sul codice "de-c99". Questo preprocessore esiste?Convertire il codice C99 in C89

+1

Credo che la ragione per creare C99 era esattamente per evitare tali "preprocessore" :) per il "futuro" (sì, gioco di parole) - Evita le funzionalità moderne se usi i vecchi strumenti. –

+1

Sarebbe meno lavoro se lo compilassi come C++ invece ... –

+2

Potresti usare un moderno compilatore di terze parti come ICC di Intel che può essere inserito in Visual Studio. –

risposta

1

Quello che ti serve è un program transformation system. Tale strumento legge il codice sorgente, costruisce strutture di dati del compilatore (come abstract syntax trees, consente di applicare trasformazioni (sorgente-origine) su tali strutture e quindi può rigenerare l'origine dalle strutture dati modificate

È necessario uno che può analizzare C99 e trasformarsi in C89. Il nostro DMS Software Reengineering Toolkit può farlo usando il suo C Front End (che può gestire entrambi i dialetti di C, incluso MSVC 89, oltre a ObjectiveC). Avere un parser maturo è necessario se si vuole fare questo

Molte persone possono suggerire che tutto il necessario è un parser C99. In pratica, ciò non è vero, per fare eventuali trasformazioni interessanti su linguaggi informatici tipici hai bisogno di dati di tabelle di simboli, flusso di dati, ecc. Per maggiori dettagli, vedi il mio articolo su Life After Parsing e come DMS fornisce quella vita.

Uno di questi aspetti è la modalità di codifica della sostituzione degli inizializzatori di struct. Potresti farlo con un codice personalizzato che percorre un AST C99, trova tali inizializzatori di struct e incide proceduralmente l'albero. Sì, funziona, ma non è facile e devi conoscere una quantità enorme della struttura dell'albero. DMS offre riscritture origine-sorgente, in modo da poter scrivere modelli che riconoscono gli idiomi che si desidera modificare e schemi che producono gli idiomi risultanti, tutti utilizzando la sintassi della superficie C.

3

Lo commerciale Comeau C/C++ compiler può farlo.

In alternativa, utilizzare un compilatore C appropriato (ad esempio GCC o Clang tramite MinGW, Pelles C, Intel) e collegare i file oggetto risultanti. Tuttavia, non tutti questi (in particolare MinGW) supportano il formato di debug di Microsoft.

Problemi correlati