我正在为我正在处理的 C 项目ctags
生成tags
文件,但文件中缺少许多函数。这似乎是由于使用#ifdef
. 一个(简化的)示例:
#include <stdio.h>
struct mystruct {
long member;
#ifndef _MSC_VER
}__attribute__ ((packed));
#else /* _MSC_VER */
};
#pragma pack(pop)
#endif /* _MSC_VER */
char* greeting_text(){
return "Hello world\n";
}
int main( int argc, const char* argv[] ){
char * greeting = greeting_text();
printf(greeting);
return 0;
}
gcc -Wall
这可以在 Linux 下完美地编译和工作。但是,如果我使用 解析它ctags problem.c
,则该tags
文件仅包含mystruct
-- 缺少函数的条目。
ctags --verbose
报告:
OPENING problem.c as C language file
problem.c: unexpected closing brace at line 8
problem.c: retrying file with fallback brace matching algorithm
OPENING problem.c as C language file
problem.c: unexpected closing brace at line 8
所以显然ctags
不喜欢文件中的预处理器技巧。
有没有办法ctags
处理这个?
的手册页ctags
甚至明确提到了这个问题,但表示ctags
可以解决这个问题。但是,这似乎不起作用......
这是 Exuberant Ctags 5.8(Debian 软件包 1:5.8-4)。
编辑:
我也对处理这类结构的 ctags 的替代品感兴趣。