找到导致错误的缺少分号的最佳策略是什么?是否有可能有用的自动化工具。
我目前正在使用Visual Studio 2008,但是针对任何环境的一般策略都会很有趣并且更有用。
背景:
目前,我在C ++程序中有一个特别难以捉摸的缺失分号(或括号)导致C2143错误。我的头文件依赖性相当简单,但我似乎无法找到问题。而不是发布我的代码并玩Where Wally(或Waldo,取决于你来自哪里),我认为获得一些可以在这种和类似情况下应用的好策略会更有用。
作为一个侧面问题:C2143错误显示在.cpp文件的第一个方法声明的第一行(即方法的返回类型)中,该文件仅包含其关联的.h文件。除了分号或大括号之外的任何东西会导致这种行为吗?
答案 0 :(得分:5)
您是否在标题中的类定义后忘记了分号?这是cpp文件中第一个方法出错的一个相当常见的原因。我不认为有一个普通的魔法“找到丢失的分号”工具; VS试图做出有根据的猜测,但如果它没有了,那是因为你写的代码在没有它的情况下有些合法,即使它不是你想要的
答案 1 :(得分:3)
从编译器告诉您错误的行开始,然后查看该行之前的代码。
答案 2 :(得分:1)
除了(正如@Michael建议的)从课程结束时,它不太可能是一个缺失的分号。通常,缺少分号会导致一两行内的错误。
如果它是一个范围支撑,那么它通常不会太远,虽然有时它们可能还有很长的路要走。
从错误行回溯(向后向上移动代码,然后向后通过每个包含来自底部),检查大括号。有可能是在错误网站之前的cpp文件的开头,或最后一个包含的结尾,所以这是最好的起点。
您可以使用各种技巧:
只需阅读代码即可。如果你遵循一个干净的对称编码风格,一个缺失的支撑通常会打你的脸。 (如果代码格式不一致,您可以使用Edit-> Advanced-> Format Document来整理代码。)
将光标放在示波器的每一端}并按ctrl +}将光标移动到匹配的大括号。这将不执行任何操作,在这种情况下没有匹配,或者会跳转到匹配,您可以检查它是否是正确的括号。
如果你需要考虑很多代码,只需用#if FALSE评论很多代码。您将获得不同的编译器错误,但如果原始错误仍然存在,则表明它不是由注释代码引起的,您可以转到下一个include / class / block。
最糟糕的情况是它是宏中的一些代码。如果您在最后一天添加/编辑/使用过任何宏,请检查优先。