用C++在VS中查找缺失分号的最有效方法是什么?

问题描述:

找到导致错误的缺失分号的最佳策略是什么?有没有自动化工具可能会有帮助。用C++在VS中查找缺失分号的最有效方法是什么?

我目前使用的是Visual Studio 2008,但是对于任何环境的一般策略都会很有趣并且更加广泛地有用。

背景: 目前我有一个特别难以捉摸的分号(或大括号)在C++程序中导致C2143错误。我的头文件依赖性相当简单,但我似乎无法找到问题所在。我没有发布自己的代码,而是玩“Where's Wally”(或者Waldo,取决于你来自哪里),我认为获得一些可以应用于这种和类似情况的好策略会更有用。

作为一个附带问题:C2143错误显示在仅包含关联的.h文件的.cpp文件中的第一个方法声明(即方法的返回类型)的第一行。分号或大括号以外的任何内容会导致此行为吗?

+0

在此处发布您的头文件。 Michael可能对头文件/类定义是正确的。 – Tim 2010-05-15 05:25:43

+0

我这样做的方式是使用像emacs这样的编辑器,并且我自动选择整个文件并查找缩进的位置。这对我来说是最快的。请记住,像Visual Studio这样的编译器会报告缺少分号用于其他错误。上帝只知道为什么。 – Owl 2016-09-15 15:59:58

除了(如@Michael建议的)从课程末尾开始,它不可能是缺失的分号。通常,丢失的分号会导致一行或两行内的错误。

如果它是一个范围支柱的话,通常不是太遥远,虽然有时也可以是很长的路要走..

从错误行回溯(倒退了代码,然后向后通过每一个包括从底部开始),检查大括号。有可能是在错误站点之前的cpp文件的开头,或者是最后一个包含的结尾,所以这是最好的开始。

您可以使用各种技术:

  • 刚才读的代码。如果你遵循一种干净的对称编码风格,那么一个缺失的支架会经常在你面前拍打你。 (如果代码格式不一致,可以使用编辑 - >高级 - >格式化文档来整理代码)。

  • 将光标放在示波器的每个末端}并按ctrl +}将光标移至匹配的大括号。这将无所作为,在这种情况下没有匹配,或者会跳到比赛,你可以检查它是否是正确的大括号。

  • 如果您有很多代码需要考虑,只需使用#if FALSE评论大量代码即可。你会得到不同的编译器错误,但是如果原来的错误仍然存​​在,你就会知道它不是由注释代码引起的,你可以移动到下一个include/class /块。

  • 最糟糕的情况是它是宏中的一些代码。如果您在最后一天添加/编辑/使用了任何宏,请先检查它们第一个

+0

为什么'#if FALSE'是一个评论巨大代码块的好方法? – 2010-05-15 05:31:11

+0

@Kotti使用标准/ * * /注释将不起作用,因为文件中的第一个*/closing标签将停止注释。 #if FALSE应该告诉编译器在FALSE为TRUE时(即永远不会)只包含代码,直到下一个#endif – 2010-05-15 07:29:08

+0

+1,用于文档格式化并找到匹配大括号的重要提示 - 我习惯了Eclipse,它突出了匹配当光标位于大括号旁边时支撑,等等。 – 2010-05-15 07:31:09

您是否忘记了标题中类定义之后的分号?这是cpp文件中第一种方法错误的常见原因。我不认为有一个普遍的魔法“找到缺少的分号”工具; VS试图做一个有根据的猜测,但如果它关闭,这是因为你写的代码在没有它的情况下是合法的,即使它不是你想要的

+1

我检查的第一件事是所有带有头文件的类都带有分号。在这种情况下,我可能会将其作为我策略中的第一步。 – 2010-05-15 07:24:43

从编译器告诉你的错误开始,在该行之前的代码中。

+1

有趣的是。为什么错误信息不会更聪明? ';]'+1 – 2010-05-15 05:42:29