Python脚本打印C/C++文件中的所有函数定义

11 投票
4 回答
13042 浏览
提问于 2025-04-15 15:21

我想要一个Python脚本,能够打印出一个C/C++文件中定义的所有函数的列表。

比如说,abc.c文件里定义了两个函数,如下所示:

void func1() { }
int func2(int i) { printf("%d", i); return 1; }

我只想搜索这个文件(abc.c),然后打印出里面定义的所有函数(只要函数名)。在上面的例子中,我想用Python脚本打印出func1func2

4 个回答

2

要做到这一点,你需要解析C或C++代码,然后从解析器生成的抽象语法树(AST)中提取函数定义。

C语言相对容易解析。正如pavpanchekha提到的,解析器PLY自带一个C语言解析器,并且已经被用来制作以下相关项目:

解析C++代码就复杂多了。你可以参考“有没有好的Python库可以解析C++”这篇帖子:

C++的解析非常困难。大多数尝试正确解析的人最终都得拆解一个编译器。实际上,这也是LLVM项目启动的部分原因:苹果需要一种方法,能够解析C++以便在XCode中使用,这种方法要和编译器解析的方式一致。

这就是为什么会有像GCC_XML这样的项目,你可以将它与Python的XML库结合使用。

最后,如果你的代码不需要特别稳健,你可以先用代码格式化工具,比如indent(用于C代码)来整理一下代码,然后再用正则表达式匹配函数定义。是的,这个方法不太好,有点黑科技,容易出错,你可能会在多行注释中找到函数定义等等,但也许它能勉强工作。

2

antlr 是你需要的工具

4

我建议你使用PLY这个工具,它可以帮助你处理代码。这个工具里有一个现成的C语言解析器,而且解析速度很快。一旦你把文件解析完,就不难找到所有的函数了。

http://www.dabeaz.com/ply/

撰写回答