如何在类C源文件中编程识别并解析函数签名(无外部依赖)
轻量级C/C++函数签名解析方案需求与实现思路
场景与核心需求
手里有一个C或语法高度接近C的语言源文件,文件特性如下:
- 可能包含
#include等预处理指令 - 存在0个、1个或多个带函数体的定义,也可能包含仅声明无定义的函数
- 语法合法,补全依赖头文件后可正常编译,但无法执行预处理操作,也无法获取依赖的头文件
需要实现一套高效、成熟的编程方案,达成以下目标:
- 定位文件中的所有函数签名
- 最好能生成签名对应的抽象语法树(AST)或解析树
- 实现过程中不得依赖任何外部文件
约束条件
- 实现语言采用C++(兼容C实现)
- 禁止使用cppast这类重型解析工具(此类工具通常需要依赖完整头文件集合)
- 可假设目标函数:无函数指针类型参数,也不返回函数指针
- 生成的AST越丰富越好,但不做强制要求
- 曾构想借鉴IDE专用解析器——这类解析器对语法错误、缺失文件具备较强鲁棒性,即便文件存在依赖缺失也能输出有效解析结果,但目前仅为初步思路
局限性说明
该方案无需覆盖所有极端场景,仅需处理常规无特殊操作的函数定义即可。以下情况不在处理范围内:
- 通过特殊预处理技巧隐藏或混淆的函数声明/定义
- 格式极其怪异、不符合常规编码规范的代码
内容的提问来源于stack exchange,提问作者einpoklum
相关产品推荐
相关产品推荐

