2010-01-02 55 views
4

我使用「ExuberantCtags」也被稱爲「CTAGS -e」,也被稱爲僅僅是「ETag的」瞭解`CTAGS -e`文件格式(emacs的CTAGS)

,我試圖瞭解TAGS文件格式是由etags命令生成的,特別是我想了解TAGS文件的第2行。

Wikipedia says該行#2描述是這樣的:

{src_file},{size_of_tag_definition_data_in_bytes} 

雖然在標籤文件行實際上:2 「的foo.c」 看起來像這樣

foo.c,1683 

我的困惑是如何它究竟是否找到這個數字:1683

我知道它是「tag_definition」的大小,所以我想知道什麼是 「tag_definition」?

我已經試過尋找ctags source code,但也許有人比我更擅長C會更成功地搞清楚這一點。

謝謝!

EDIT#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字節偏離?

謝謝你的幫助肯!

回答

5

這是數字後面的換行符之後的標籤數據的字節數。

編輯:它也不包括文件標籤數據之間的^ L字符。記住etags來自很久以前,讀取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個字節。

hello.cc數據從「hello.cc,45^J」後面的行開始並運行45個字節 - 這也恰好是完整的行。給出字節的原因是讀取文件的代碼只能爲45字節的字符串分配空間並讀取45個字節。 「^ L^J」行位於45個字節的標籤數據之後。您將其用作剩餘更多文件以及驗證文件格式正確的標記。

hello.h數據從「hello.h,15^J」後面的行開始並運行15個字節。

+0

謝謝,但現在我還有一個問題,但我會把它放在主哨。 – 2010-01-02 07:13:05

+0

非常感謝您的幫助,現在有意義,但是什麼是{bytes_offset}?我已將修改更新爲主帖子。 – 2010-01-02 21:47:15

3

標記條目的{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 
+0

再次感謝肯! – 2010-01-02 22:59:04