我有大量的C++源文件,我想通過擴展我指定的單個函數宏來進行轉換,並保留所有其他預處理指令不變。對宏觀的爭論通常涉及到parens和大括號以及paren保護的逗號,所以用sed和kin做這件事似乎並不是直截了當的。擴展C++源文件中的單個宏
更新: 我們的代碼大量使用宏來生成鍋爐板(例如swig的幫助代碼)。因爲我們最好想出如何做某些事情,所以各種宏不再做任何非常有趣的事情(例如,只聲明一些函數),許多人抱怨說他們讓代碼難以閱讀。我想擴展一些擴展爲簡單C++代碼的不太有趣的宏。
我有大量的C++源文件,我想通過擴展我指定的單個函數宏來進行轉換,並保留所有其他預處理指令不變。對宏觀的爭論通常涉及到parens和大括號以及paren保護的逗號,所以用sed和kin做這件事似乎並不是直截了當的。擴展C++源文件中的單個宏
更新: 我們的代碼大量使用宏來生成鍋爐板(例如swig的幫助代碼)。因爲我們最好想出如何做某些事情,所以各種宏不再做任何非常有趣的事情(例如,只聲明一些函數),許多人抱怨說他們讓代碼難以閱讀。我想擴展一些擴展爲簡單C++代碼的不太有趣的宏。
我在python中使用正則表達式來做這種事情。你可以編寫一個相當簡短的腳本來處理大量的文件,並在每個文件上運行一些正則表達式。正則表達式可能是最耗時的部分。
我已經使用過,當參數都是簡單的(沒有嵌套parens),但我的理解是,匹配嵌套括號在正則表達式中會很困難 – user1959101
如果不知道你要做什麼,很難說清楚,但我認爲它應該仍然可行。 – shargors
undef.h
文件#undef
的填充它爲所有要不要擴大extern int LandMarkSoYouCanFindThis;
作爲其最後一行#include "undef.h"
後的宏最後包含在一個文件中。cpp
LandMark
切斷一切從包括您可能能夠通過生成從差異#undef
之間的補丁荷蘭國際集團剛剛選擇宏和#undef
荷蘭國際集團所有宏到最後一步的自動化。
請問爲什麼?無論你想要做什麼,都可能有更好的策略。 – djechlin
沒有測試(因爲評論沒有回答)..你可能可以運行全局搜索和替換,將'#include'更改爲'//#include',然後運行'gcc -E -DHHHVERVER',並在結果上反轉初步搜索和替換...或者寫一個有限的解析器或正則表達式... – johannes
@johannes:哦謝謝!我想過運行pp,但沒有考慮評論包括...... :(但你需要評論*所有* pp的聲明這個工作。 – ybungalobill