Question

J'utilise "ExuberantCtags" également connu sous le nom "ctags -e", aussi connu comme juste "etags"

et je suis en train de comprendre le format de fichier TAGS qui est généré par la commande etags, en particulier, je veux comprendre la ligne n ° 2 du fichier TAGS.

Wikipedia dit que la ligne n ° 2 est décrit comme ceci:

{src_file},{size_of_tag_definition_data_in_bytes}

En pratique Bien que la ligne de fichier TAGS: 2 pour "foo.c" ressemble à ceci

foo.c,1683

Mon dilemme est de savoir comment exactement il trouver ce numéro: 1683

Je sais qu'il est la taille de la « tag_definition » donc ce que je veux savoir est ce qui est le "tag_definition"?

Je l'ai essayé de regarder à travers le ctags code source , mais peut-être quelqu'un de mieux à C que moi aurai plus le succès essayant de se faire.

Merci!

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

Bon, si je comprends bien, « 79 » fait référence au nombre d'octets dans le fichier de TAGS après 79 jusques et y compris « 91 ^ J ».

Donne son sens.

Maintenant, les numéros 20, 59, 91 dans cet exemple wikipedia dit se référer à la {byte_offset}

Quel est le {} byte_offset décalage par rapport?

Merci pour toute l'aide Ken!

Était-ce utile?

La solution

Il est le nombre d'octets de données de tag de la nouvelle ligne après le numéro.

Edit: Il ne comprend pas le caractère ^ L entre les données d'étiquette de fichier. Rappelez-vous etags vient d'une époque où il y a longtemps la lecture d'un fichier 500KB était une opération coûteuse. ;)

Voici un fichier complet des balises. Je le montrer deux façons, la première avec des caractères de contrôle comme ^ X et pas de caractères invisibles. Les caractères de fin de ligne implicites dans votre exemple sont ^ J ici:

^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

Voici le même fichier affiché en hexadécimal:

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

Il existe deux ensembles de données d'étiquette dans cet exemple:. 45 octets de données pour hello.cc et 15 octets pour hello.h

Les données de hello.cc commence sur la ligne suivante « hello.cc, 45 ^ J » et se poursuit pendant 45 octets - cela arrive aussi d'être des lignes complètes. La raison pour laquelle les octets sont données est donc la lecture du code du fichier peut simplement allouer de l'espace pour une chaîne de 45 octets et lu 45 octets. La ligne « ^ L ^ J » est après les 45 octets de données d'étiquette. Vous utilisez cela comme un marqueur qu'il ya plus de fichiers restants et aussi pour vérifier que le fichier est correctement formaté.

Les données de hello.h commence sur la ligne suivante "hello.h, 15 ^ J" et fonctionne pour 15 octets.

Autres conseils

La {} byte_offset pour une entrée de balise est le nombre d'octets à partir du début du fichier de la fonction est définie. Le numéro avant l'octet de décalage est le numéro de ligne. Dans votre exemple:

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

la fonction foo commence 20 octets à partir du début de hello.c. Vous pouvez vérifier que avec un éditeur de texte qui indique votre position du curseur dans le fichier. Vous pouvez également utiliser la commande Unix queue pour afficher un fichier un nombre d'octets dans:

tail -c +20 hello.c
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top