所以我继承了一些和我一样老的代码,我的任务是维护它。该代码是使用 Visual C++ 6 编写的,因此无论如何它都不是现代的。
无论如何,我决定尝试升级该解决方案(或者我猜微软当时称之为工作区),以便我可以将它与 Visual Studio 2013 一起使用并使用某种现代的 IDE(我想我宁愿使用 Emacs或 VC++ 6 上的普通记事本)。 After having changed the character set for the MFC library ,我收到一大堆未声明的标识符
错误(大约有 1100 个错误)。其中很多似乎源于临时变量范围问题,这让我想知道以前如何允许编译此代码。我看到很多这样的东西:
void MyClass::MyFunc()
{
for(int i=0;i<56;i++)
{
// do some stuff
}
// command hardware
for(i=0;i<m_pinfo->vc_num;i++)
{
// do some more stuff
}
}
奇迹般的是,这段代码在 VC++ 6 中编译得很好,但(幸运的是)在 VS 2013 中却不行。请注意变量 i
是如何在第一个 for
的范围内声明的> 循环,但随后在第二个 for
循环中再次使用它。这种代码遍布整个程序。
使用 VC++ 6 的 Goto Definition 工具,它告诉我变量 i
(但它仍然可以编译!)和几个看似不相关的变量和参数之间存在歧义'i' 全部位于单独的 .cpp 文件中,其中一些甚至在结构中定义。
这里可能发生了什么?无论如何,我看不出这段代码是如何在 VC++6 中编译的。
最佳答案
它是 MSVC++ 6 中的扩展。根据标准,在 for 循环中声明的变量无法在 for 循环范围之外访问。如果您需要在 MSVS 的新版本中获得这种非标准行为,那么您可以 Enable the /Zc:forScope flag
我建议您修复 for 循环,以便获得符合标准的代码。这样,不知道此扩展存在的人就不会对该代码感到惊讶。
关于c++ - Visual C++ 6 变量作用域错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34496832/