用正則非常難做到精準過濾; C語言的主要特性:
1、塊註釋,由塊開始符號/* 和塊註釋結束符號組成 */ ;
2、行註釋,非字串符號中的//一般就是註釋內容;
3、字串符號,字串開始符號和結束如何,C語言為雙引號;
4、單字元符號,C語言為單引號;
5、轉義符,\,主要是一些場景,字串中出現轉義符,可能會出現"實際上不是字串結束標記,同樣轉移符也可以轉義自身,"aaa\\",則最後的"是字元粗結束符; 理解了這些邏輯後,你就可以寫一個簡單的程式去判斷註釋內容和函式體了; 大致虛擬碼: while(讀取檔案行) { while(遍歷字元) { if 不在註釋中 && 不在字串引用中 && 不再字元引用 && 出現行註釋符號 該行後為註釋內容; if 不在塊註釋中 && 不在字串引用中 && 不再字元引用 && 出現塊註釋符開始符號 塊註釋開始 if 在塊註釋中 && 不在字串引用中 && 不再字元引用 && 出現塊註釋符結束符號 塊註釋結束 類似上面的方法,判斷在字串引用中 類似上面的方法,判斷在字元引用中 } }
用正則非常難做到精準過濾; C語言的主要特性:
1、塊註釋,由塊開始符號/* 和塊註釋結束符號組成 */ ;
2、行註釋,非字串符號中的//一般就是註釋內容;
3、字串符號,字串開始符號和結束如何,C語言為雙引號;
4、單字元符號,C語言為單引號;
5、轉義符,\,主要是一些場景,字串中出現轉義符,可能會出現"實際上不是字串結束標記,同樣轉移符也可以轉義自身,"aaa\\",則最後的"是字元粗結束符; 理解了這些邏輯後,你就可以寫一個簡單的程式去判斷註釋內容和函式體了; 大致虛擬碼: while(讀取檔案行) { while(遍歷字元) { if 不在註釋中 && 不在字串引用中 && 不再字元引用 && 出現行註釋符號 該行後為註釋內容; if 不在塊註釋中 && 不在字串引用中 && 不再字元引用 && 出現塊註釋符開始符號 塊註釋開始 if 在塊註釋中 && 不在字串引用中 && 不再字元引用 && 出現塊註釋符結束符號 塊註釋結束 類似上面的方法,判斷在字串引用中 類似上面的方法,判斷在字元引用中 } }