Jen*_*ens 4 header-file macro ctags
我可以tags
使用 exctags ( Exuberant Ctags )成功地为 vim创建一个文件。
但是,创建允许跳转到函数原型的标签不起作用,因为系统标头使用了表单的语法修改宏
#define _EXFUN(name, proto) name proto
Run Code Online (Sandbox Code Playgroud)
并在,例如string.h
使用
char *_EXFUN(strchr,(const char *, int));
Run Code Online (Sandbox Code Playgroud)
它为_EXFUN
而不是创建了一个标签strchr
:
_EXFUN /somedir/include/string.h /^char *_EXFUN(strchr,(const char *, int));$/;" p
Run Code Online (Sandbox Code Playgroud)
我用这个命令创建标签:
exctags -f tags.p --language-force=c --c-kinds=p file1 file2 ...
Run Code Online (Sandbox Code Playgroud)
我上下阅读了 exctags 手册页,尝试了各种-I
选项来影响宏扩展,但无济于事。有没有人解决过这个问题?
ectags
在预处理文件上运行,并要求它查看预处理器的注释 ( --line-directives=yes
) 并将行号写入tags
文件 (-n
或--excmd=numbers
)。
cc -E prog.c >prog.p
ectags --line-directives=yes --language-force=c --c-kinds=p -n prog.p
Run Code Online (Sandbox Code Playgroud)
示例 C 文件:
#define _EXFUN(name, proto) name proto
char *_EXFUN(strchr,(const char *, int));
Run Code Online (Sandbox Code Playgroud)
结果tags
文件:
!_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 //
strchr prog.c 3;" p file:
Run Code Online (Sandbox Code Playgroud)
如您所见, 的原型strchr
被列为出现在 中的第 3 行prog.c
。
这样做的缺点是您不会获得任何用于预处理宏的标记条目。
您可以通过ectags
在预处理和原始文件上运行来解决这个问题:
ectags --line-directives=yes --language-force=c --c-kinds=pd -n -I _EXFUN prog.p prog.c
Run Code Online (Sandbox Code Playgroud)
产生
[...]
_EXFUN prog.c 1;" d file:
strchr prog.c 3;" p file:
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
505 次 |
最近记录: |