我使用“ExuberantCtags”也被称为“CTAGS -e”,也被称为只是“ETag的”

和我想了解其由ETag的生成的命令标签文件格式,特别是我想了解标签文件的线#2。

维基说该行#2这样描述:

{src_file},{size_of_tag_definition_data_in_bytes}

在虽然TAGS文件行实用术语:2 “的foo.c” 看起来像这样

foo.c,1683

我的困惑是如何准确它发现这个数字:1683

我知道这是“tag_definition”的大小,所以我想知道的是什么 了 “tag_definition”?

我试图寻找通过 CTAGS的源代码,但也许更好位于C有人比我将有更多的成功搞清楚了这一点。

谢谢!

编辑#2:

^L^J
hello.c,79^J
float foo (float x) {^?foo^A3,20^J
float bar () {^?bar^A7,59^J
int main() {^?main^A11,91^J

好了,所以如果正确地明白“79”从后79直至并包括“91 ^ J”指的是在标签文件的字节数。

非常有意义。

现在的数字20,59,91在此实例中维基说指的是{byte_offset字节}

什么是{byte_offset字节}偏离?

感谢所有帮助肯!

有帮助吗?

解决方案

这是数之后的换行符以下标记的数据的字节数。

编辑:它也不包括文件的标签数据之间的^字母L。记住的ETag不久前来自一个时间,读取500KB的文件是一个昂贵的操作。 ;)

下面是一个完整的标签文件。我展示这两种方式,先用控制字符^ X,不可见字符。在您的示例的隐式端部的行的字符是道^ J这里:

^L^J
hello.cc,45^J
int main(^?5,41^J
int foo(^?9,92^J
int bar(^?13,121^J
^L^J
hello.h,15^J
#define X ^?2,1^J

下面是相同的文件显示在十六进制:

0000000    0c  0a  68  65  6c  6c  6f  2e  63  63  2c  34  35  0a  69  6e
          ff  nl   h   e   l   l   o   .   c   c   ,   4   5  nl   i   n
0000020    74  20  6d  61  69  6e  28  7f  35  2c  34  31  0a  69  6e  74
           t  sp   m   a   i   n   ( del   5   ,   4   1  nl   i   n   t
0000040    20  66  6f  6f  28  7f  39  2c  39  32  0a  69  6e  74  20  62
          sp   f   o   o   ( del   9   ,   9   2  nl   i   n   t  sp   b
0000060    61  72  28  7f  31  33  2c  31  32  31  0a  0c  0a  68  65  6c
           a   r   ( del   1   3   ,   1   2   1  nl  ff  nl   h   e   l
0000100    6c  6f  2e  68  2c  31  35  0a  23  64  65  66  69  6e  65  20
           l   o   .   h   ,   1   5  nl   #   d   e   f   i   n   e  sp
0000120    58  20  7f  32  2c  31  0a                                    
           X  sp del   2   ,   1  nl

有两组标签数据在这个例子中:45个字节用于hello.cc数据和用于hello.h 15个字节

就行了以下45个字节的数据hello.cc开始“hello.cc,45 ^ J”和运行 - 这也恰好是完整行。为什么字节给出的理由是这样的代码读取文件可以直接分配空间,45字节的字符串和读取45个字节。的“^ L ^ J”线是45个字节标签数据之后。您可以使用此作为一个标记有剩余的,也验证文件格式正确更多的文件。

以下 “hello.h,15 ^ J” 和管路15个字节线上的hello.h数据开始。

其他提示

在{byte_offset字节}用于标签条目是从该函数中规定的文件的开始的字节数。的字节偏移前的数字是行号。在您的示例:

hello.c,79^J
float foo (float x) {^?foo^A3,20^J

foo的功能开始从hello.c中的开始20个字节。您可以验证用文本编辑器显示该文件中的光标位置。还可以使用Unix tail命令显示文件的字节数中:

tail -c +20 hello.c
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top