2013-01-08 25 views
4

我有大量的C++源文件,我想通過擴展我指定的單個函數宏來進行轉換,並保留所有其他預處理指令不變。對宏觀的爭論通常涉及到parens和大括號以及paren保護的逗號,所以用sed和kin做這件事似乎並不是直截了當的。擴展C++源文件中的單個宏

更新: 我們的代碼大量使用宏來生成鍋爐板(例如swig的幫助代碼)。因爲我們最好想出如何做某些事情,所以各種宏不再做任何非常有趣的事情(例如,只聲明一些函數),許多人抱怨說他們讓代碼難以閱讀。我想擴展一些擴展爲簡單C++代碼的不太有趣的宏。

+12

請問爲什麼?無論你想要做什麼,都可能有更好的策略。 – djechlin

+1

沒有測試(因爲評論沒有回答)..你可能可以運行全局搜索和替換,將'#include'更改爲'//#include',然後運行'gcc -E -DHHHVERVER',並在結果上反轉初步搜索和替換...或者寫一個有限的解析器或正則表達式... – johannes

+0

@johannes:哦謝謝!我想過運行pp,但沒有考慮評論包括...... :(但你需要評論*所有* pp的聲明這個工作。 – ybungalobill

回答

2

我在python中使用正則表達式來做這種事情。你可以編寫一個相當簡短的腳本來處理大量的文件,並在每個文件上運行一些正則表達式。正則表達式可能是最耗時的部分。

+0

我已經使用過,當參數都是簡單的(沒有嵌套parens),但我的理解是,匹配嵌套括號在正則表達式中會很困難 – user1959101

+0

如果不知道你要做什麼,很難說清楚,但我認爲它應該仍然可行。 – shargors

0
  • 創建undef.h文件
  • #undef的填充它爲所有要不要擴大
  • 包括extern int LandMarkSoYouCanFindThis;作爲其最後一行
  • 對於每個文件
    • 進樣#include "undef.h"後的宏最後包含在一個文件中。
    • 貫穿cpp
    • 文件使用LandMark切斷一切從包括
    • 合併回原始文件。

您可能能夠通過生成從差異#undef之間的補丁荷蘭國際集團剛剛選擇宏和#undef荷蘭國際集團所有宏到最後一步的自動化。