C++ 有没有找到变量定义的程序或技巧?

C++ 有没有找到变量定义的程序或技巧?,c++,variables,find,definition,C++,Variables,Find,Definition,很多时候,当我观看别人的代码时,我只是想找到变量的定义位置和定义方式。通常我现在做的是寻找变量的类型,直到找到定义,这非常耗时。我想有一些工具可以帮助我解决这个习惯性的问题。在一些工具或命令中有什么建议可以帮助我完成这项任务吗 我知道使用GUI和创建项目是自动完成的,我说的是一种不用GUI的方法。我只使用文本模式。我在Linux下运行,使用C/C++,但欢迎对其他语言提出建议 非常感谢 可能的解决方案 Michel在他的一篇评论中提出了一个简单有效的解决方案,再次定义变量,在这种情况下,在编译时

很多时候,当我观看别人的代码时,我只是想找到变量的定义位置和定义方式。通常我现在做的是寻找变量的类型,直到找到定义,这非常耗时。我想有一些工具可以帮助我解决这个习惯性的问题。在一些工具或命令中有什么建议可以帮助我完成这项任务吗

我知道使用GUI和创建项目是自动完成的,我说的是一种不用GUI的方法。我只使用文本模式。我在Linux下运行,使用C/C++,但欢迎对其他语言提出建议

非常感谢

可能的解决方案

Michel在他的一篇评论中提出了一个简单有效的解决方案,再次定义变量,在这种情况下,在编译时,编译器将通知先前的定义在哪里。当然,要应用这个解决方案,我们需要事先考虑变量的位置。

< P>编辑:好的,你说你在使用C++。我正在编辑我的回复。我将使用C预处理器,然后grep作为变量。它将首先出现

cpp -I...(preprocessor options here) file.cpp | grep variable
C预处理器将连接程序使用的所有include,定义必须在文件中使用该变量之前进行。这不是一件完美的事情,但如果没有IDE或完整的语言描述/管理工具,您就只有文本


另一个选择是使用。它理解C和C++语法(除此之外),并且可以使用命令行工具、Emacs和vi等来搜索变量和函数,等等。

您已经给出了最合适的工具:IDE。这正是IDE所擅长的。如果您发现没有IDE开发是痛苦的,为什么不想使用IDE呢

请注意,Emacs、Vim等可以作为IDE使用——我不是说,如果您想停留在纯文本的环境中,例如,因为您正在使用


< P>(我真的不想在这里粗鲁。我只是认为你没有解释为什么会打消这个明显的解决方案)。< /P> < P>如果你在微软Visual Studio(我认为你也可以使用C++,但需要在Windows工作站上工作),那么有一个“点击去定义……”的右键菜单选项。这将带您进入任何当前标记的变量、类型或方法的定义。

如果您坚持保持文本模式,您可以使用带有适当插件的emacs或vi来实现这一点

但实际上,进入21世纪

编辑:您评论说您是通过SSH执行此操作的,因为您需要远程服务器集群的构建速度


在这种情况下,请在本地计算机上安装驱动器并使用IDE,只需SSH就可以开始构建。

Grep了解变量声明的常见模式。示例:*、&>或字母数字后跟一个或多个空格字符,然后是变量名称。或变量名后跟零个或多个空格字符,然后是左括号或分号。除非它是在非常奇怪的情况下定义的(比如使用某种宏),否则它每次都能工作。

我虔诚地使用cscope和CTAG。在我的代码库中运行一次,然后在Vim中,我可以使用各种命令,如^]或[D或[I或类似命令,来查找给定单词的任何定义或声明

这与大型IDE(如VisualStudio和Eclipse)提供的设施类似


Cscope还可以作为一个独立的工具来执行这些搜索。

我使用以下三种方法之一:

  • 我将使用来处理我的源代码树(每晚),然后可以轻松地使用Vim(或其他编辑器)中的命令直接跳转到定义
  • 我将只使用grep(linux)或findstr(windows)来查找变量名或类型的所有匹配项
  • 在Vim中,您可以在范围内向后搜索,并经常找到您要查找的内容

  • 在VIM中,您可以使用
    gd
    查看局部变量声明,或者使用
    gd
    查看全局变量声明(如果它们在当前文件中定义)。参考


    您还可以使用
    [i
    查看定义,而无需跳转到定义,或
    [i < /COD>以查看所有变量中所有变量的出现,这自然也会显示定义。

    你至少可以指定语言;我现在是C++的,现在我的头脑只想到一个LangaGe.重新定义变量的方法不是一个解决方案。你有不同的命名空间。例如,如果要查找名为“average”的变量,可以在方法或函数中或在另一个名称空间(使用相同的名称)中定义它这并不是一个错误。当我说可能的解决方案时,我想人们需要先考虑一下变量的位置。在这个问题中,我没有指定GUI,因为我是在文本模式下工作的,更不用说你漏掉了一个词:可能。我还没有发现这一点是可靠的。有时它是有效的,有些是错误的我之所以不这么认为,是因为我通常使用GUI,但现在我在一个小项目中只使用SSHing模式,我只是在寻找一些简单的东西。你看起来并不粗鲁。在这种情况下,我会使用Emacs作为IDE。如果没有“转到定义”,我会感到惊讶在某些地方,Emacs没有这样的功能,虽然CTAGS和语义,两个插件,确实提供了它。100%同意。相关链接:这个CPPCon 2015闪电谈话演示使用Emacs作为C++ IDE:除了CTAGS之外,语义是Emacs用户可能要退房的另一个附加项:谢谢,CODeloGIC。是的,我只是DeCV。再次感谢。是的,通常我都是这样做的,但我在寻找更专业的东西