列出C / C ++函数(Unix中的代码分析)

无论我们是维护不熟悉的代码还是检查Apache模块的实现细节,如果我们能够快速遍历代码并构建我们正在查看的内容的概述,它将会有所帮助。 Grep服务于我的大部分日常需求,但有些情况下它不会做。

以下是它可以提供帮助的常见示例。 要找到我感兴趣的PHP函数的定义,我可以在命令行输入:

grep -r "function myfunc" . 

如果我们知道返回类型,这可以很快适应C或C ++,但是如果我想列出我的类提供的每个方法,事情会变得更复杂:

 grep "function " ./src/mine.class.php 

由于没有单一的关键字表示C ++中的函数或方法,并且因为它通常是更复杂的语法,我认为我需要某种静态代码分析工具,智能使用C预处理器或盲目信任编码器遵循严格的代码指南(空白的数量,curites的位置等)以获得这些结果。

你会推荐什么?

通过Doxygen运行它。 它会抱怨缺乏评论,但它仍会产生调用图并列出所有function。 以HTML格式显示,其中包含遵循代码路径的链接。

doxygen的

旺盛的Ctags http://ctags.sourceforge.net/

我以前只是不时地使用它,并且在文本编辑器中,但是查看可以使用它的实用程序/工具列表:

http://ctags.sourceforge.net/tools.html

Doxygen能够生成一些合理的html文档并解析注释。 它并不完美,但它可能会有所帮助。 您可以将Ctags合并到编辑器中,以跳转到您正在寻找的function。

就个人而言,我使用grep;)

cscope非常适合这类事情。 与ctags不同,cscope提供了一个适合搜索的界面(ctags需要一个编辑器)。

只需在要检查的代码的根目录中运行cscope。 它将:创建一个数据库(如果不存在),更新数据库(如果存在),并打开一个curses gui,您可以在其中查询各种有用的信息

  • 所有对符号的引用
  • 全球定义
  • 函数调用的函数
  • 调用函数的函数
  • 文字字符串
  • 正则表达式
  • 一份文件
  • 文件包括文件

ctags只执行第一个,’所有引用符号’。

grep '^[a-zA-Z0-9][ *]+ {[a-zA-Z0-9_]+}\([a-zA-Z0-9\,\.\-\>]\*\)$'

大致是你想要的。 它可能需要一些游戏,但匹配一个有效的C ++返回类型,给它选择它是一个指针,然后是一个函数名称(将是\ 1),打开括号,参数,关闭。

除非您在函数声明中包含换行符,否则该通用表单(return,name,(param))应该有效。

我会使用Doxygen或其他工具来解析它,但是如果你需要快速一次地执行它,正则表达式可能更容易(或者可能不会,正如你所知道的正则表达式)。