【发布时间】:2011-03-13 12:39:13
【问题描述】:
我正在使用ctags 为我正在处理的C 项目生成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;
}
这可以在 Linux 下与 gcc -Wall 完美编译和工作。但是,如果我使用 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 的替代品感兴趣。
【问题讨论】:
标签: c c-preprocessor ctags exuberant-ctags