概要
获取C文件各函数的有效行数,可以协助代码规范检查(函数长度、嵌套深度)、评估代码质量、评估测试工作量、确认重点优化的函数(如代码行数过多的函数是否封装?)。本文使用python代码编写脚本,获取c文件中各个函数的有效行数。
整体架构流程
python脚本获取文件夹中的c文件,然后逐个处理c文件,获取c文件名称、函数名称、有效代码行数。
1、读入c文件后,先进行前处理:移除单行注释、块注释、条件编译定义的调试代码等;
2、定义正则表达式,获取函数声明 [返回类型] [函数名] [参数列表 ],其中返回类型需要兼容viod类型、int\long\double\float等基本类型、自定义类型等;
3、获取函数有效行数,生成EXCEL表格,便于数据分析。
定义的主要python函数:
1、generate_excel_report(src_dir, output_file="function_report.xlsx"),函数输入参数src_dir,读取指定文件夹中的c文件,输出参数output_file="function_report.xlsx",将函数有效行数保存在EXCEL文件中,默认名称:function_report.xlsx。
2、extract_functions(file_path): 获取c文件中函数的有效行数。
3、remove_comments(content: str):移除单行注释、块注释。
4、remove_preprocessor_directives(content, macros_to_remove=[ "WSS_DEBUG_MODE" ]), 移除C代码中指定宏定义的条件编译块.
5、extract_function_body(content, start_pos):栈式平衡匹配函数体花括号,获取函数体内容,支持任意嵌套。
主要技术难点
1、提取函数声明的正则表达式定义。为防止提取错误的函数名,如“else if()”语句被识别为函数声明,正则表达式需要解决问题:①排除流程控制关键字;②支持基本类型和自定义类型。
2、函数体的获取:通过 栈(Stack) 实现括号的平衡检测,处理任意嵌套(如递归函数、多层条件分支)。
运行结果 
小工具获取


被折叠的 条评论
为什么被折叠?



