這個要做得完美還是挺麻煩的,有點象編譯器的一部分工作了。我考慮,要完成如下這些處理:
1.掃描全檔案,關注如下內容:a,註釋-------------以便隨時可知當前位置是否處於註釋範圍內b,預處理指令#define、#include等--以便隨時可知當前位置是否處於預處理指令範圍內c,字串---字串開始標誌是",但不包括表示單個字元的情況(如chara=""";或printf("%c",""")),若當前處於a或b的有效範圍,也不記錄其為有效標誌。找到開始標誌後,開始找字元結束標誌,結束標誌確認方法是在開始標誌確認方法基礎上,還要去掉被轉義的情況,即\"。重複這個過程,定位出全部字串。並記錄下這些串的始終點位置。
2.在檔案中確認定義新宏的位置---可以在最後一條#include指令之後3.對1中找到的全部有效字串,在新宏位置處加一條#define宏名字串[enter],並用宏名替換原位置處的串幾點說明:-按上述方法,類似printf("%d",i)中的"%d"也會被替換為宏。-宏名為了不重複,可用字母+數字的形式,且數字不斷自加。同時,安全起見,對每個宏名都要在原檔案中查詢一遍,確保檔案全文中沒有出現與宏名相同的串。-插入新宏的定義以及用宏替換原串時,要考慮到對1中記錄的串的位置的影響,需要同步更新串的位置記錄。
這個要做得完美還是挺麻煩的,有點象編譯器的一部分工作了。我考慮,要完成如下這些處理:
1.掃描全檔案,關注如下內容:a,註釋-------------以便隨時可知當前位置是否處於註釋範圍內b,預處理指令#define、#include等--以便隨時可知當前位置是否處於預處理指令範圍內c,字串---字串開始標誌是",但不包括表示單個字元的情況(如chara=""";或printf("%c",""")),若當前處於a或b的有效範圍,也不記錄其為有效標誌。找到開始標誌後,開始找字元結束標誌,結束標誌確認方法是在開始標誌確認方法基礎上,還要去掉被轉義的情況,即\"。重複這個過程,定位出全部字串。並記錄下這些串的始終點位置。
2.在檔案中確認定義新宏的位置---可以在最後一條#include指令之後3.對1中找到的全部有效字串,在新宏位置處加一條#define宏名字串[enter],並用宏名替換原位置處的串幾點說明:-按上述方法,類似printf("%d",i)中的"%d"也會被替換為宏。-宏名為了不重複,可用字母+數字的形式,且數字不斷自加。同時,安全起見,對每個宏名都要在原檔案中查詢一遍,確保檔案全文中沒有出現與宏名相同的串。-插入新宏的定義以及用宏替換原串時,要考慮到對1中記錄的串的位置的影響,需要同步更新串的位置記錄。