如何使用 clang 格式控制数组初始值设定项的缩进?

Posted

技术标签:

【中文标题】如何使用 clang 格式控制数组初始值设定项的缩进?【英文标题】:How do I control indentation of array initializers with clang-format? 【发布时间】:2015-07-31 09:30:15 【问题描述】:

有时 clang-format 会这样做:

SomeType VariableName[] = Thing1,
                           Thing2,
                           Thing3

有时 clang-format 会这样做:

SomeType VariableName[] = 
   Thing1,
   Thing2,
   Thing3

而且单个字符的变化就可以让它在两者之间切换。

有什么方法可以控制它的作用吗?

我是从最新的 git 源构建的,所以可以使用最新的选项。

【问题讨论】:

您能否提供更多关于什么样的单个字符更改可以使其切换的信息?这些信息将有助于我找出答案。谢谢。 我试图为这个问题创建一个小案例,但它工作正常没有问题。 单个字符的变化是 PointerAlignment 从 Right 变为 Middle。 我不明白“工作正常没有问题”。我并没有声称存在错误。只是我更喜欢总是获得第二种样式。 【参考方案1】:

根据this answer,clang-format 在某些步骤中尽可能多地放在一行上,并在其上应用ColumnLimit

这可以解释行为之间的转换。

One way 为防止这种情况发生,可以将ColumnLimit 设置为 0,代价是移除所有自动换行。我认为这是值得的,我相信其他人不同意。

【讨论】:

【参考方案2】:

clang-format 为用户提供了一种在格式化代码时指定单个属性的方式,例如是否允许tabtabwidth 是什么。

您可以使用以下方式告诉clang-format 使用自定义属性。

  $clang-format -style="BaseonStype: llvm, IndentWidth: 8"
  $clang-format -style=HAND_WRITTEN_FORMAT_FILENAME
  $clang-format -style=llvm  #builtin styles.

您可以了解可以在file 中从171 行到266 行中自定义哪些属性。

【讨论】:

我知道如何更改属性。我仔细研究了clang.llvm.org/docs/ClangFormatStyleOptions.html,它似乎是最新的源。似乎没有属性可以控制这种行为,尽管较小的 ColumnLimit 通常会将其从第一种样式更改为第二种样式。

以上是关于如何使用 clang 格式控制数组初始值设定项的缩进?的主要内容,如果未能解决你的问题,请参考以下文章

C中如何实现数组的传值引用

SwiftUI 分段控制

在 C++17 中,可以使用带有初始值设定项的 if 语句来解压可选项吗?

React 中是不是仍需要带有自动绑定和属性初始值设定项的构造函数

在 C++ 中指定初始值设定项的情况下的模板参数推导

clang 格式,数组初始化器