【问题标题】:Is there a way to disable "SpacesInBraces" in clang-format?有没有办法以clang格式禁用“SpacesInBraces”?
【发布时间】:2026-01-19 11:05:02
【问题描述】:

我想要这个:

int x{ 0 };

看起来像这样:

int x{0};

但我在the documentation 中没有看到它的选项。

有:

  • SpacesInAngles
  • SpacesInContainerLiterals
  • SpacesInParentheses
  • SpacesInSquareBrackets

但我没有看到大括号的选项。这在 clang 格式中可行吗?

编辑:发布的第一个答案使用Cpp11BracedListStyle。这样做的问题是它可以防止数组中的换行符。因此,即使是文字数组中的 100 个元素也不会中断。这是一个太大的副作用,无法下咽。

【问题讨论】:

    标签: c++ c++11 format clang clang-format


    【解决方案1】:

    您可以通过 Cpp11BracedListStyle 做到这一点。

    来自docs

    如果是true,则将大括号列表格式化为最适合 C++11 大括号列表。

    重要区别:

    • 大括号列表中没有空格。
    • 右大括号前没有换行符。
    • 缩进与连续缩进,而不是与块缩进。

    【讨论】:

    • 虽然这将解决该问题,但这将完全防止阵列初始化时的线路制动。所以即使是 100 个元素也会在同一行。
    • @TheQuantumPhysicist 你有例子吗?我仍然遇到换行符。
    • 尝试int x[] = {1,2,3,4,5,6,7,...} 之类的内容,最多可以包含大量元素,它不会中断。公平地说,无论Cpp11BracedListStyle 是真是假,对我来说都不是问题。但我假设Cpp11BracedListStyle 部分原因是因为它说它不会破坏你引用的描述。
    • @TheQuantumPhysicist 无法复制。 godbolt.org/z/lSAL0z,如果我在左边的代码上运行clang-format -style=LLVM,我会得到右边的代码。您还可以在编译器资源管理器中使用clang-format。在设置下,选择 LLVM 作为样式,右键单击左侧的源并按格式。
    • @TheQuantumPhysicist 我将描述解释为在最后一个元素和右大括号之间没有换行符。
    最近更新 更多