質問

私もちょうど "etagsの" として知られても、 "ctagsの-e" として知られている "ExuberantCtags" を、使用しています。

は、私は特に私がTAGSファイルのライン#2を理解したい、コマンドetagsのによって生成されたTAGSファイル形式を理解しようとしています。

ウィキペディアにそのライン#2は、次のように記述されていると言います:

{src_file},{size_of_tag_definition_data_in_bytes}
TAGSファイル行けれども実用的な面では、

:2本

のような "foo.cの" ルックスのために
foo.c,1683
1683

私の苦境は、この番号を見つけることない正確にどのようにあります 私が知りたいことは何かということですので、

私はそれが「tag_definition」の大きさを知っています "tag_definition"?

私はのctagsソースコードのを見しようとしているが、おそらく誰かがより良い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」は「91 ^ J」を含む79までと後からTAGSファイルのバイト数を指します。

は完璧な理にかなってます。

{byte_offset}

を参照して述べているウィキペディアこの例では今番号20、59、91 からオフセット{byte_offset}は何ですか?

すべてのヘルプケンてくれてありがとう!

役に立ちましたか?

解決

この番号の後に改行を次のタグデータのバイト数です。

編集:また、ファイルのタグデータとの間に、^ L文字が含まれていません。 500キロバイトのファイルを読み込むことは高価な操作あった場所のetagsはずっと前の時間から来て覚えておいてください。 ;)

ここでは、完全なタグファイルです。私はそれを二つの方法、^ 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

この例では、タグデータの2つのセットがあります。hello.ccためのデータの45バイト及び15バイトhello.hため

は45バイトのためhello.ccデータの次の行で始まり「hello.cc、45 ^ J」と実行 - これはまた、完全な行であることを起こります。ファイルを読み込むコードはわずか45バイト文字列のための部屋を割り当て、45のバイトを読むことができるようにバイトが与えられている理由です。 「^ L ^ J」行タグデータの45バイトの後です。あなたは残りと、ファイルが正しくフォーマットされていることを確認するために、より多くのファイルがあることをマーカーとしてこれを使用します。

15バイトのための "hello.h、15 ^ J" と実行し、次の行に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