gpt4 book ai didi

c++ - 具有相同名称的静态变量的开关案例的单独范围

转载 作者:太空狗 更新时间:2023-10-29 20:13:22 26 4
gpt4 key购买 nike

<分区>

更新:我现在重新测试了一个简化的测试用例和完整的代码,恢复了共享名称,并且它工作正常。我的代码中其他地方可能还有其他错误,现在已修复。很抱歉浪费了您的时间和精力;将来永远不会在没有工作测试用例的情况下发布。 我认错了。


我有一个我反复调用的 C++ 函数。它包含以下代码片段

     switch(c)
{
case 1:
{
static int i = 0;
if ( ... ) { i = 0; }
....
break;
}
case 2:
{
static int i = 0;
if ( ... ) { i = 0; }
....
break;
}
case 3:
{
static int i = 0;
if ( ... ) { i = 0; }
....
break;
}
}

这个想法是它必须记住每个案例的状态,有时它必须重置它。

它没有正常工作。当我调试它(​​MSVC++ 2010 Express Edition)时,我注意到每个 i 的行为都不是独立的,它们的值似乎在自行改变;此外,当满足重置条件时,相应的 if 被输入 OK 但 i = 0; 语句只是......跳过!!! “locals”窗口显示 i 及其先前的值,未更改(而当前语句是下一个语句,仍在 if 中)。 if 中的其他语句正确执行。

当我用唯一名称(i1i2i3)重命名每个 i 时,问题走了。

这是一些错误,还是我应该知道的一些语言特性?我认为每个 block { ... } 定义独立的范围。这里发生了什么?它可以用 C 语言工作吗?

编辑: 很抱歉没有构建测试用例。会这样做,稍后再报告。

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