gpt4 book ai didi

c++ - Visual C++,使用相同迭代器名称的多个 for 循环,在 Debug模式下在范围外可见

转载 作者:太空狗 更新时间:2023-10-29 23:04:19 27 4
gpt4 key购买 nike

我使用的是 Visual Studio Express 2013 并且有多个 for 循环,其中我对迭代器使用相同的名称,如下所示:

for (int i = 0; i < 10; i++) {
// do something
}
....
for (int i = 0; i < 10; i++) {
// do something else
}

当我在 Debug模式下单步执行时,在离开第一个 for 循环后,第一个 'i' 在 Locals 窗口中仍然可见,其最终值为 10,即使它已经超出范围。然后我进入第二个 for 循环,我现在有两个 i 正在显示(尽管具有不同的值)。这有点烦人,因为我会在另一个条件下的某个地方中断,我无法立即看到 i 的值是多少。我可以通过在迭代器范围外声明一次“i”来解决这个问题:

int i;
...
for (i = 0; i < 10; i++) {
// do something
}
...
for (i = 0; i < 10; i++) {
// do something else
}

但它仍然困扰着我,因为它看起来不一致。我希望看到与此相同的行为,第一个“i”一旦超出范围就会从 Locals 窗口中消失:

{
int i = 0;}
}
...
{
int i = 1;
}

我想知道这是否只是微软的问题,或者我是否没有正确理解 for 循环中的作用域...

最佳答案

不错的收获。

对我来说,这听起来或多或少像是一个编译器错误。 VC 中有一个选项可以选择“在 For 循环范围内强制一致性”,以便 for 循环变量超出 for 循环范围之外。

但是,这并不能解决您在调试器中提到的问题。无论您选择哪个选项,这两个变量都存在于调试器中,这似乎令人困惑。

区分它们的唯一方法是超出范围的 i 在 Debug模式下应该具有值 0xcccccccc。这应该是特定于编译器的,并且 WinDbg 以不同的方式处理它,如下文所述。

我试过的:VC2008、VC2012

有一个good article很好地试验了这个问题。

关于c++ - Visual C++,使用相同迭代器名称的多个 for 循环,在 Debug模式下在范围外可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23050912/

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