c++ - Visual C++ 6 变量作用域错误

标签 c++ visual-c++ visual-studio-2013 scope mfc

所以我继承了一些和我一样老的代码,我的任务是维护它。该代码是使用 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/

相关文章:

c - 为什么int转char没有溢出警告

c - Windows C 运行时库没有像我预期的那样链接?

visual-studio-2013 - 使用 Web Essentials 2013 将 Compass 集成到 Visual Studio 2013 update 2

c++ - 接口(interface)类型的 CMake 3.0 add_library 中断 get_target_property

c++ - 平衡二叉树编码

c++ - 如何使用 std::transform 进行计算

c++ - VirtualQueryEx 与 ReadProcessMemory 的关系

c++ - 大数除法返回 1 [c++]

c++ -/d2vzeroupper MSVC 编译器优化标志在做什么?

visual-studio-2013 - 如何忽略我的 Windows 应用商店应用程序中的 MSTest 错误消息?