首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ctags找不到一个函数

ctags找不到一个函数
EN

Stack Overflow用户
提问于 2017-03-26 23:19:14
回答 2查看 1.8K关注 0票数 2

我克隆了鲜牛肝菌 (git://git.savannah.gnu.org/gnulib.git,Last : 23.03.2017),并通过ctags (ExuberantC5.9~svn20110310)索引所有文件:

代码语言:javascript
复制
ctags -R gnulib

令人惊讶的是,我没有找到grep的任何full_write函数标记(我对这个函数特别感兴趣)

代码语言:javascript
复制
grep full_write tags

但是这个函数是在gnulib/lib/full-write.h中声明的。

代码语言:javascript
复制
extern size_t full_write (int fd, const void *buf, size_t count);

以及在gnulib/lib/full-write.c中重新定义

代码语言:javascript
复制
# define full_rw full_write

所以我真的很困惑:为什么ctags没有识别这个特定的函数呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-12 17:56:12

要捕获声明,请使用--C--种类=+p选项。

代码语言:javascript
复制
[jet@localhost ~]$ git clone git://git.savannah.gnu.org/gnulib.git

Cloning into 'gnulib'...
remote: Counting objects: 174685, done.        
remote: Compressing objects: 100% (24750/24750), done.        
remote: Total 174685 (delta 149911), reused 174636 (delta 149876)        
Receiving objects: 100% (174685/174685), 33.95 MiB | 3.97 MiB/s, done.
Resolving deltas: 100% (149911/149911), done.
Checking connectivity... done.
[jet@localhost gnulib]$ ctags --C-kinds=+p -R
[jet@localhost gnulib]$ grep  full_write tags
full_write  lib/full-write.h    /^extern size_t full_write (int fd, const void *buf, size_t count);$/;" p
票数 3
EN

Stack Overflow用户

发布于 2017-03-27 00:00:07

ctags可以看到声明,但是可以有很多声明。但是它没有看到任何定义,因为真正的定义看起来像C函数full_rwhttp://git.savannah.gnu.org/cgit/gnulib.git/tree/lib/full-write.c?id=683b6078961f10905baba598c469402ed0133425#n51的定义。

代码语言:javascript
复制
#ifdef FULL_READ
..
# define full_rw full_read
#else
...
# define full_rw full_write
#endif
size_t
full_rw (int fd, const void *buf, size_t count)

ctags没有完全的c++预处理功能(只有几个带有-I选项的预处理试探,记录在http://ctags.sourceforge.net/ctags.html中)。因此ctags无法意识到full_rw函数定义定义了其他一些东西,即full_write函数。有ctags文档的部分

注意事项 因为ctag既不是预处理器,也不是编译器,所以使用预处理器宏可以愚弄ctag,使其丢失标记或不适当地生成不适当的标记。虽然ctag被设计用来处理某些常见的情况,但这是报告问题的最大原因。特别是,使用改变C的文本语法的预处理结构可以欺骗ctag。您可以使用−I选项来解决许多这样的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43035737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档