通过 clang-format 用换行符分隔大括号括起来的列表的每个条目

Tar*_*ski 7 clang-format

我有大括号括起来的列表来初始化数组。我想让数组初始值设定项为数组的每个条目换行,如下所示:

const char* const array_of_strings[] = {
    "Hey",
    "Hi",
    "Hello",
    "Soup",
    "Atom"
};
Run Code Online (Sandbox Code Playgroud)

不过,clang-format 将此数组格式化为:

const char *const array_of_strings[] = {"Hey", "Hi", "Hello", "Soup", "Atom"};
Run Code Online (Sandbox Code Playgroud)

一旦列表超过ColumnLimit ,通常会进行新的排列。我想要的格式可以使用 clang-format 吗?

Eri*_*kus 8

这大多是可能的。你需要两件事:

  • BinPackArguments样式选项设置为false。我猜想 clang-format 正在将大括号括起来的初始值设定项列表视为参数。(文档并没有真正指定这一点,但看起来很合理。)
  • 使用最后一项后的逗号功能。为此,请在“Atom”和右大括号之间添加逗号。这个功能在我见过的任何地方都没有记录,但它已经以 clang 格式存在了许多版本和很多年。

使用上述两种设置以及默认的 clang-format 设置,您的输出将如下所示:

const char *const array_of_strings[] = {
    "Hey",
    "Hi",
    "Hello",
    "Soup",
    "Atom",
};
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你,这太棒了!有趣的是,需要最后一项后的逗号功能。如果没有它,clang-format 会尝试将第一个元素和最后一个元素与括号放在同一行。看看这个功能是否真的被记录下来会很有趣。 (2认同)