【问题标题】:broken indentation formatting when if/else chain is over 100 lines in length - visual studio 2017 C++当 if/else 链长度超过 100 行时,缩进格式损坏 - Visual Studio 2017 C++
【发布时间】:2026-02-07 06:50:02
【问题描述】:

使用 Visual Studio 2017 v15.9.35 时 我注意到对于具有长 if/else 链的函数,缩进会在某些时候中断。经过一些实验,我能够弄清楚原因;当 if/else 链的长度超过 100 行(从第一个 if() 行开始)时,格式会中断。

//低于 100 行的预期行为

void test()
{
    int x = 10;
    if(x == 10)
    {
        x = 11; 
    }
    else //when you press enter twice the closing bracket is in the correct position
    {
        x = 12;
    }
}

//>= 100 行

void test()
{
    int x = 10;
    if(x == 10)
    {
        x = 11;
        x = 11;
        ... repeat 95 more times (97 in total)
    }
    else //when you press enter twice the formatting breaks
    {
    x=12;
}
}

发生这种情况后,所有新的代码行都会错位 1 个选项卡,这真的很烦人。我给出的示例不切实际,但很容易重现,在真实场景中,累积达到 100 多行(不仅仅是在单个块中)会导致相同的行为。我想知道这是否是一个错误,或者是否有一些我可以调整的设置或我可以安装的插件以获得正确的行为。我知道通过将块代码移动到单独的函数中来重构代码以减少总长度也是一种选择,但这并不总是最理想的解决方案。我也打算在 https://developercommunity.visualstudio.com/ 上报告此问题,但我不确定是否仍支持 2017 年。

同样重申一下,问题是:这是一个错误还是我可以调整一些设置或我可以安装插件以获得正确的行为。

【问题讨论】:

  • 更新到最新版本,如果不能修复,请报告给 MS。在单个函数中包含 100 行是非常不可读的,在单个 if 语句中包含 100 行甚至更糟。将你的代码重构为多个函数,如果它们被声明为内联,它通常应该优化到相同的程序集,并使你的代码更具可读性和可维护性
  • 2019 有同样的问题
  • 我给出的示例不切实际,但很容易重现,在真实场景中累积仅达到 100 多行 -- MS 团队目前正在将更新推送到 2019 年定期。向他们报告问题,因为您可以轻松复制它。
  • 不是最好的解决方案,但您可以使用inline 函数?
  • 我将此问题报告给了 MS 团队。根据他们的说法,这是一个已知问题,也可以由其他操作触发,例如声明一个跨越 100 行的枚举。希望他们能尽快修复。

标签: c++ visual-studio if-statement formatting indentation


【解决方案1】:

在向 Microsoft 团队报告此问题后,我们注意到这是一个已知问题。这证实了它确实是一个错误,而不是设置相关的东西。

https://developercommunity.visualstudio.com/t/Inconsistent-auto-tabulation-behavior-wh/1429071

在查看其他一些也被标记为重复的报告时,我发现了 VS 2019 的部分解决方案。

https://developercommunity2.visualstudio.com/t/Visual-Studio-2019-and-C:-Indenting-on/986698

我发现在选项中阻止这种情况的唯一方法是更改 Tabs->从智能缩进到块。但不幸的是,这也会禁用 我确实想要的其他选项,例如在我键入时格式化部分 “}”或“;”。

【讨论】:

    最近更新 更多