Linux Tips: 一種批量修改C語言工程的函式命名風格的方法
阿新 • • 發佈:2021-10-26
- 通過ctags解析工程目錄中所有函式
# 遍歷所有C檔案並將解析出的函式名放在funcs檔案中
find ./ -name "*.[ch]" -exec ctags -x --c-types=f {} \; | awk '{print $1}' >> funcs
- 通過python指令碼生成函式轉換表
#!/usr/bin/python3 # -*- coding=utf-8 -*- import os import sys import subprocess def style_convert(func): ''' 函式命名風格轉換 小寫加下劃線轉換為駝峰方式''' new_func = func[0] for i in range(1, len(func)): if func[i] == '_': func[i + 1] = func[i + 1].upper() else: new_func += func[i] return new_func def codestyle_covert(prj_dir): ''' 轉換一個工程目錄下所有C檔案的函式命名風格 ''' # 讀取待轉換函式 funcs_file = '{}/funcs'.format(prj_dir) with open(funcs_file, 'r') as f: funcs = f.readlines() # 去掉換行符 funcs = [func.strip() for func in funcs] # 生成函式轉換表 funcmap = [(func, style_convert(list(func))) for func in funcs] # 獲取工程目錄下所有.c.h檔案 cmd = ['find', prj_dir, '-name', '*.[ch]'] files = subprocess.check_output(cmd).decode('utf-8').split() # 對所有檔案執行函式替換操作 for f in files: print("Coverting {}...".format(f), end='', flush=True) for fm in funcmap: cmd = ['sed', '-i', r's/\<{}\>/{}/g'.format(fm[0], fm[1]), f] subprocess.call(cmd) print('.', end='', flush=True) print('.done') def main(): if len(sys.argv) < 2: print("[Error]: No input project directory.") exit(0) prj_dir = sys.argv[1]; if not os.path.isdir(prj_dir): print("Invalid project directory:", prj_dir) exit(0) codestyle_covert(prj_dir) if __name__ == '__main__': main()
- 例項展示
-
轉換前工程目錄狀況和函式定義
-
解析所有函式
-
執行轉換,再次檢視函式定義