0

私は Exuberant Ctags v5.8 を使用しており、タグ ファイルを生成したい C ソース サンプルは以下のとおりです。

#define PACK(x) __packed x                                                                                                                                                                                  

typedef PACK(struct) {
    int a;
    int b;
    int c;
} my_struct;

PACK(void *) my_func(PACK(void *) var1, int var2)
{
    *var1 = var2;
    return var1;
}

そして、これは生成されたタグファイルの内容です:

!_TAG_FILE_FORMAT   2   /extended format; --format=1 will not append ;" to lines/ 
!_TAG_FILE_SORTED   1   /0=unsorted, 1=sorted, 2=foldcase/ 
!_TAG_PROGRAM_AUTHOR    Darren Hiebert  /dhiebert@users.sourceforge.net/ 
!_TAG_PROGRAM_NAME Exuberant Ctags  // 
!_TAG_PROGRAM_URL   http://ctags.sourceforge.net    /official site/ 
!_TAG_PROGRAM_VERSION   5.8 // 
PACK    test.c  /^#define PACK(/;"  d   file: 
PACK    test.c /^typedef PACK(struct) {$/;" f

タグファイルの予想される内容は次のようになります。

!_TAG_FILE_FORMAT   2   /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED   1   /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_PROGRAM_AUTHOR    Darren Hiebert  /dhiebert@users.sourceforge.net/
!_TAG_PROGRAM_NAME  Exuberant Ctags //
!_TAG_PROGRAM_URL   http://ctags.sourceforge.net    /official site/
!_TAG_PROGRAM_VERSION   5.8 //
a   test.c  /^    int a;$/;"    m   struct:__anon1  file:
b   test.c  /^    int b;$/;"    m   struct:__anon1  file:
c   test.c  /^    int c;$/;"    m   struct:__anon1  file:
my_func test.c  /^void * my_func(void * var1, int var2)$/;" f
my_struct   test.c  /^} my_struct;$/;"  t   typeref:struct:__anon1  file:

元の C ソース ファイルから後者のタグ ファイルを取得するにはどうすればよいですか? ありがとう!

4

1 に答える 1

0

これは、ファイルを自分で前処理し (上記でコメントしたように awk を使用)、事前処理されたバージョンで Exuberant Ctags を動作させない限り、直接行うことはできません。

Exuberant Ctags は、定義を処理するために -Iコマンド ライン オプションを使用します。プリプロセッサの定義を無視したり (例: -I PACK)、定義の置換を実行したり (例: -I PACK=FOO)、識別子とその引数リストを無視したり (例: ) できますが-I PACK+、これらのオプションのいずれも、マクロをその引数の 1 つに置き換えることを処理しません。

これを新しい機能として要求することを検討するかもしれませんが、積極的に開発されているようには見えません。最後の改訂は 2009 年 7 月でした。

于 2015-02-05T23:28:58.153 に答える