Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing 如何使用CTAG仅获取函数_Parsing_Ctags - Fatal编程技术网

Parsing 如何使用CTAG仅获取函数

Parsing 如何使用CTAG仅获取函数,parsing,ctags,Parsing,Ctags,如何仅为函数生成CTAG而忽略typedef和struct? 我尝试了ctags--declarations--output=tags program.c,但我必须手动解析这些函数。 我尝试过:ctags-x--c-kinds=fp path\u to\u文件。2,但我得到以下错误: ctags: unrecognized option '--c-kinds=fp' Try `ctags --help' for a complete list of options. 编辑: 在我安装e

如何仅为函数生成CTAG而忽略typedef和struct? 我尝试了
ctags--declarations--output=tags program.c
,但我必须手动解析这些函数。 我尝试过:
ctags-x--c-kinds=fp path\u to\u文件。2
,但我得到以下错误:

ctags: unrecognized option '--c-kinds=fp'
    Try `ctags --help' for a complete list of options.
编辑: 在我安装exuberant之后,以下操作将实现仅获取函数头的技巧:

ctags -x --c-types=f ./prog.c
对于任何偶然发现这个问题的人,如果您想要完整的函数(标题和正文),您需要为此编写一个脚本。但这并不难。我使用函数头作为索引。只要读取并找到每个函数头在文件中的位置,就可以得到一个唯一的索引——有些函数名是相同的,因此,请迭代代码并使用一段时间,只添加并继续在代码中查找该函数,直到它得到一个与索引列表中的索引不同的索引。将函数名和位置保存在元组列表中,然后按升序对列表进行排序。然后,通过从第一个函数的顶部开始并读取列表中的下一个函数来读取代码提取函数。您可能需要根据您的情况进行一些更改。

确保您正在使用。在我的系统上:

$ 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

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

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

如果定义跨越多行怎么办?
ctags -x --c-types=f source.c|cut -c51- |sed -e 's/$/;/g' > header.h