【问题标题】:Formatting of switch statementswitch语句的格式
【发布时间】:2014-02-07 23:17:40
【问题描述】:

假设我的光标位置位于右大写花括号的右侧,如下所示:

现在,如果我按下回车键,我希望它会自动将光标对齐两个标签,就像break 语句一样。但它的作用是这样的:

它增加了一个可笑的五个标签!知道 Visual Studio 有大量设置,我导航到 Tools::Settings::Text Editor::C/C++::Formatting::Indentation,然后看到以下窗口:

但是以任何组合更改突出显示的选项实际上根本不会影响缩进!其他选项似乎都不适用于 switch 语句,所以我不知道该怎么做。如何在不禁用自动格式化的情况下使其不缩进 5 个空格?

我可能会补充一点,当我在花括号的末尾按 Enter 键时,它不仅会放置 5 个制表符,而且会在发生任何自动格式化事件时放置。因此,当我在行尾添加分号时,它会放置 5 个制表符,即使我之前已将它们取出。

【问题讨论】:

  • 我不确定,如果你仍然遇到这个问题,但它似乎是由智能缩进 Text Editor -> C/C++ -> Tabs -> Indenting (设置为 Block) 引起的。
  • @DenisV 工作!但只有时间会证明它是否会破坏其他任何东西......

标签: c++ visual-studio-2013 indentation


【解决方案1】:

这对你来说可能有点晚了,但万一其他人发现了这个问题:这似乎是一个 Visual Studio 错误,你可能正在运行名为 REL 的新安装的 VS2K13 版本。

http://www.microsoft.com/en-us/download/details.aspx?id=44921 下载更新 4 对我有帮助。

【讨论】:

    【解决方案2】:

    花括号({})正在摆脱自动缩进器,它缩进到大括号之外的一个制表符。

    switch 语句中的大括号并不违法,但它们通常对您没有任何好处。除非您需要它来确定变量声明的范围,否则只需删除花括号。您将获得相同的代码流,并且不会混淆自动缩进器。

    编辑 想一想,您可以通过简单地将大括号移动到新行来解决这个问题。这不一定是可怕的 - 它突出显示您正在使用支架。

    case SDLK_g:
        {
            // etc
            break;
        }
    

    【讨论】:

    • 我确实想要花括号,因为我确实在定义变量声明的范围!另外,我认为它使代码更整洁。谢谢你的回答
    • 在这种情况下,我认为你被卡住了。您可以对大括号进行一些设置,但这可能会在您的开关之外丢弃所有代码。
    • 很高兴知道该编辑。感谢您的回答!
    • 没问题。在某些时候,您会想要使用 switch 语句,因此最好知道如何使它们整洁。
    【解决方案3】:

    我进入 VS2013 并创建了一个新项目,并尝试制作一个非常简单的switch,但它的格式对我来说是正确的,即使使用花括号也是如此。你能发布那组代码吗?

    我唯一能想到的另一件事可能是关于如何设置大括号的设置,但我不知道为什么会影响它。 (我也不认为 C++ 真的有这样的设置...)除此之外,尽管您可以尝试根本不使用大括号,因为您在 case 语句中,但从技术上讲,您不需要它们.

    除此之外,安装过程中可能发生了一些事情。所以重新安装也是一种选择。

    编辑:
    另外,可以直接使用它并完成代码,然后在完成后突出显示行并将它们取消缩进([SHIFT]+[TAB])回到正确的位置。

    【讨论】:

    • 这确实很奇怪。我自己创建了一个新项目,它的格式与我的示例一样,所以我知道这不是什么奇怪的项目设置。我一直讨厌 switch 语句,但我想我会给他们一个机会。现在我们知道结果如何了。我将只使用一组else/if。螺丝开关语句!
    • 哈哈我同意。我从来都不是超级粉丝,但它们比if{}else{} 语句更快,并且在某些情况下它们看起来更干净。对我来说,老实说,这听起来像是刚刚安装了一些奇怪的东西。因此,无论是重新安装还是更新,都非常痛苦。很抱歉没有明确的解决方案。
    • 很好。我确信任何性能差异都可以忽略不计,我可以让它们看起来很整洁。最后我可能会重新安装,但我认为我现在很好。
    • VS 2013 Pro 也出现了同样的问题。我把牙套放在哪里都没关系。编辑器添加 2 或 3 个制表符,然后在制表符后添加 2 或 3 个空格(即使我关闭了空格)!在确定下一个缩进的位置时,它显然存在逻辑错误。它同时显示空格和制表符的事实确实表明某些东西完全搞砸了,而且这不太可能是预期的代码路径。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    相关资源
    最近更新 更多