如何將c99源代碼自動轉換爲c89?我想用Visual C++編譯c99庫,但MSVC只支持c89。許多更改只是語法上的,比如結構初始化器,並且您可以編寫一個工具來自動「去除c99」代碼。這個預處理器是否存在?將C99代碼轉換爲C89
8
A
回答
1
你需要的是一個program transformation system。這樣的工具讀取源代碼,構建編譯器的數據結構(如abstract syntax trees,使你可以應用(源到源)上的結構轉換,然後可以從修改後的數據結構的再生源。
你需要一個它可以解析C99,並轉換爲C89。我們的DMS Software Reengineering Toolkit可以使用它的C Front End(它可以處理C的兩種方言,包括MSVC 89以及ObjectiveC)。如果你想要這樣做,需要一個成熟的解析器
許多人可能會建議你需要的是全部是一個C99解析器,實際上,這是不正確的;在典型的計算機語言上做任何有趣的轉換您需要符號表數據,某些數據流等。有關更多詳細信息,請參閱我在Life After Parsing上的散文,以及DMS如何提供這種生活。
一個這樣的方面是你如何編碼替換結構初始值設定項。您可以通過自定義代碼來執行此操作,這些代碼遍歷C99 AST,找到這樣的結構初始化程序,然後程序性地破解該樹。是的,這是有效的,但這並不容易,你必須知道關於樹結構的大量數據。 DMS提供源到源重寫,因此您可以編寫識別要修改的習慣用法的模式,以及生成所產生的習慣用法的模式,全部使用C語言語法。
3
商業Comeau C/C++ compiler可以做到這一點。
或者,使用合適的C編譯器(例如,通過MinGW,Pelles C,Intel的GCC或Clang)並鏈接生成的目標文件。但是,並非所有這些(特別是MinGW)都支持微軟的調試格式。
5
基於鏘源到源翻譯:
相關問題
- 1. 哪個更好c89或c99
- 2. C89 vs c99 GCC編譯器
- 3. 用c89和c99編譯gcc 4.4.2默認爲c99嗎?
- 4. 如何將Visual Studio 2008 Express Edition配置爲c89/c90/c99?
- 5. 將VB6代碼轉換爲PHP轉換
- 6. 將xml轉換爲代碼
- 7. 將代碼轉換爲POST
- 8. 將代碼轉換爲RequireJS
- 9. 將ASTNode轉換爲代碼
- 10. 將代碼轉換爲lambda
- 11. 將UML轉換爲代碼
- 12. 將代碼轉換爲constexpr
- 13. 將代碼轉換爲python
- 14. 將Java代碼轉換爲C#代碼
- 15. 將Android代碼轉換爲MonoAndroid代碼
- 16. 將PHP代碼轉換爲C#代碼
- 17. 將JavaScript代碼轉換爲C代碼
- 18. 將Informatica代碼轉換爲SQL代碼
- 19. 將atmega32代碼轉換爲atmega16代碼
- 20. 將JavaScript代碼轉換爲VBScript代碼?
- 21. 將matlab代碼轉換爲R代碼
- 22. 將pyside代碼轉換爲pyqt5代碼
- 23. 將html代碼轉換爲actionscript代碼
- 24. 將PHP代碼轉換爲ColdFusion代碼
- 25. 將Javascript代碼轉換爲PHP代碼
- 26. 將僞代碼轉換爲C#代碼
- 27. C99,C代碼
- 28. 作業:將轉換後的僞代碼轉換爲C代碼
- 29. 將迭代器代碼轉換爲流
- 30. 將遞歸轉換爲迭代代碼
,我相信創造C99正是爲了避免這樣的「預處理器」 :)對於「未來」的原因(是的,雙關語意) - 如果您使用舊工具,請避免使用現代功能。 –
如果將它編譯爲C++,那麼它的工作量就會減少... –
您可以使用現代的第三方編譯器,如可插入Visual Studio的Intel ICC。 –