gpt4 book ai didi

c++ - Visual C++ 6 变量范围错误

转载 作者:行者123 更新时间:2023-11-30 03:45:49 25 4
gpt4 key购买 nike

所以我继承了一些和我一样古老的代码,我的任务是维护它。该代码是使用 Visual C++ 6 编写的,因此无论怎么想,它都不是现代的。

无论如何,我决定尝试升级解决方案(或者我猜微软当时称之为工作区),以便我可以将它与 Visual Studio 2013 一起使用并使用有点现代的 IDE(我想我宁愿使用 Emacs或 VC++ 6 上的普通记事本)。 After having changed the character set for the MFC library ,我收到一大堆 undeclared identifier 错误(大约 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com