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
risposta
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.
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.
Clang a base source-to-source traduttore:
- 1. È possibile combinare il codice C89 con il codice C99?
- 2. C99 è retrocompatibile con C89?
- 3. C89 vs compiler GCC c99
- 4. In che modo il programma seguente emette `C89` quando è compilato in modalità C89 e` C99` quando è compilato in modalità C99?
- 5. Come applicare dichiarazioni di variabili in stile C89 in gcc?
- 6. Semantica volatile in C99
- 7. double_t in C99
- 8. Come convertire il codice OpenGL in WebGL
- 9. Quale sezione dello standard C89 consente la regola "implicito int"?
- 10. Come convertire il codice ByteCode in codice macchina
- 11. Qualcuno può spiegare questo codice C?
- 12. ! 0 garantito per essere 1 in C89?
- 13. C89: disaccordo firmato/non firmato
- 14. Unione anonima all'interno di struct non in c99?
- 15. Quali funzionalità di C99 sono considerate dannose o non supportate
- 16. Applicare il C99 rigoroso nel progetto Autoconf
- 17. Come entrare in modalità C99 in Codeblocks10.05?
- 18. Utilizzo di sizeof() nelle dichiarazioni di array in C89
- 19. Come posso convertire facilmente il codice FORTRAN in codice Python (codice reale, non wrapper)
- 20. AS3: Come convertire il codice ASCII in actioncript del carattere
- 21. Come convertire automaticamente il codice di mantenimento manuale in ARC?
- 22. Uno strumento per convertire il codice MATLAB in Python
- 23. Come convertire il codice C# in uno script PowerShell?
- 24. Come determinare l'allineamento massimo richiesto in C99
- 25. Come convertire un carattere in codice chiave?
- 26. Come convertire llvm IR in codice c?
- 27. Signedness enum in C/C99/C++/C++ x/GNU C/GNU C99
- 28. Come convertire codice jQuery in codice AngularJS utilizzabili
- 29. Esiste un #define per C99?
- 30. Strumento per convertire java in codice C#
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. –
Sarebbe meno lavoro se lo compilassi come C++ invece ... –
Potresti usare un moderno compilatore di terze parti come ICC di Intel che può essere inserito in Visual Studio. –