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+),但是这些选项都不能处理用其参数之一替换宏。

您可能会考虑将此作为一项新功能提出要求,但它似乎不再积极开发。最后一次修订是在 2009 年 7 月。

于 2015-02-05T23:28:58.153 回答