如何仅使用 ctags 获取函数

How to get only functions with ctags

如何只为函数生成 ctags 而忽略 typedef 和结构? 我试过ctags --declarations --output=tags program.c,但我必须手动解析这个函数。 我试过:ctags -x --c-kinds=fp path_to_file. 2,但出现以下错误:

ctags: unrecognized option '--c-kinds=fp'
    Try `ctags --help' for a complete list of options.

编辑: 在我安装 exuberant 之后,下面的技巧只获得函数 headers:

ctags -x --c-types=f ./prog.c

对于偶然发现此问题的任何人,如果您想要整个函数(header 和 body),则需要为此编写一个脚本。但这并不难。我将函数 headers 用作本质上的索引。只需阅读并找到每个函数 header 在文件中的位置以获得唯一索引 - 一些函数名称相同,因此遍历代码并使用一段时间仅添加并继续查找代码函数,直到它获得与索引列表中的索引不同的索引。将函数名称和位置保存在元组列表中,然后按升序对列表进行排序。然后通过从第一个函数的顶部开始阅读列表中的下一个函数来读取代码提取函数。根据您的情况,您可能需要对此进行一些更改。

确保您使用的是 Exuberant Ctags。在我的系统上:

$ ctags --version
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
  Compiled: Nov 11 2010, 03:54:52
  Addresses: <dhiebert@users.sourceforge.net>, http://ctags.sourceforge.net
  Optional compiled features: +wildcards, +regex

您的系统必须已将 etags 符号链接到 ctags。当我这样做时,我会复制您的错误消息。但是,使用 Exuberant Ctags 的未知选项错误显示为:

ctags: Unknown option: --foo

如果您需要从源代码生成函数声明,您可以使用一点 ctags 和 sed 魔法轻松完成:

ctags -x --c-types=f source.c|cut -c51- |sed -e 's/$/;/g' > header.h