【问题标题】:How do I find out which header/include declared what variables in source? [closed]如何找出哪个标头/包含在源代码中声明了哪些变量? [关闭]
【发布时间】:2020-01-21 00:08:47
【问题描述】:

如果我看到 structtypedefconst 或任何其他未在我正在阅读的源代码中明确声明的变量,那么 Linux 中是否有标准方法来发现哪些源包含的头文件提供了变量声明?

我一直在谷歌搜索每个单独的标题,并希望声明我要查找的内容,但必须有更好的方法!

我知道你可以man <standard_func>,但这似乎过于宽泛,无法找出声明的位置。系统内或网站上是否提供权威文档?

【问题讨论】:

标签: c++ c linux posix


【解决方案1】:

由于你已经在使用 vim,我建议安装 ctags 包,它可以让你直接在编辑器中跳转到那些声明。

安装后,创建一个 ctags 文件。这将解析指定路径下的所有源代码文件,并创建一个名为tags的文件:

ctags -R /usr/include .

请注意,我们指定了/usr/include 以及当前目录,其中可能包含您正在阅读的源代码。如果它位于不同的目录中,请指定该目录。

完成后(稍等片刻),打开您感兴趣的文件。如果您仍在与新的 tags 文件相同的目录中,则 vim 已经加载了它。否则你将不得不:set tags=/path/to/tags

现在只需将光标放在您不知道的符号上,然后按Ctrl-]。或者,如果您使用的是 GUI 版本的 vim,您可以在按住 Ctrl 的同时单击鼠标左键。无论哪种方式,这都会跳转到符号的声明。

Ctrl-T 回到原来的位置。

一旦掌握了这一点,请查看:help tags:help tagstack。 vim 为与他们合作提供了广泛的支持。

【讨论】:

  • 注意:在 Ubuntu 上,默认的 ctags 没有将 -R 定义为 --recurse。使用sudo apt-get install ctags 安装支持此选项的 exuberant-ctags
  • 这也导致你#includeing平台特定的头文件。您不应该使用这种技术来决定需要哪些头文件(仅在实现时达到峰值(尽管您为什么要这样做也很奇怪))。使用手册页来决定要包含哪些头文件。
  • 注意:软件包安装管理器必须在/usr/local/include中安装“额外”库
  • @MartinYork 我对这个问题的理解是,它是关于在阅读现有代码时查找函数签名、typedef 和常量。
猜你喜欢
  • 2016-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多