Wie kann ich c99 Quellcode automatisch in c89 konvertieren? Ich möchte c99-Bibliotheken mit Visual C ++ kompilieren, aber MSVC unterstützt nur c89. Viele Änderungen sind nur syntaktisch, wie zum Beispiel Struct-Initialisierer, und Sie könnten ein Werkzeug automatisch in den "de-c99" -Code schreiben. Gibt es diesen Präprozessor?
Der kommerzielle Comeau C / C ++ Compiler kann dies tun.
Alternativ können Sie einen geeigneten C-Compiler verwenden (zB GCC oder Clang über MinGW, Pelles C, Intel) und die resultierenden Objektdateien verknüpfen. Allerdings unterstützen nicht alle (insbesondere MinGW) das Debug-Format von Microsoft.
Was Sie brauchen, ist ein Programmtransformationssystem . Solch ein Tool liest Quellcode, erstellt Compiler-Datenstrukturen (wie abstrakte Syntaxbäume , ermöglicht Ihnen die Anwendung (source-to (Quelle) Transformationen für diese Strukturen, und kann dann Quelle aus den geänderten Datenstrukturen neu generieren.
Sie benötigen einen, der C99 analysieren und in C89 umwandeln kann. Unser DMS Software Reengineering Toolkit kann dies mithilfe seiner C Front End (mit beiden Dialekten von C, einschließlich MSVC 89, sowie ObjectiveC). Es ist notwendig, einen reifen Parser zu haben, wenn Sie dies tun wollen.
Viele Leute könnten vorschlagen, dass all , was Sie brauchen, ein C99-Parser ist. In der Praxis ist das nicht wahr; Um interessante Umwandlungen in typischen Computersprachen zu machen, benötigen Sie Symboltabellendaten, einige Datenflüsse usw. Weitere Einzelheiten finden Sie in meinem Aufsatz auf Leben nach dem Analysieren und wie DMS dieses Leben bietet.
Ein solcher Aspekt ist, wie Sie die Strukturinitialisierer ersetzen. Sie könnten das durch benutzerdefinierten Code tun, der einen C99-AST durchläuft, solche Strukturinitialisierer findet und den Baum prozedural hackt. Ja, das funktioniert, aber es ist nicht einfach und man muss eine Menge über die Struktur des Baumes wissen. DMS bietet Quell-zu-Quell-Umschreibungen, so dass Sie Muster schreiben können, die die zu modifizierenden Idiome erkennen, und Muster, die die resultierenden Idiome erzeugen, wobei alle C-Oberflächensyntax verwenden.
Tags und Links c visual-c++ c99