是否有任何选项可以使 clang-format 产生以下效果?

Is there any options to make clang-format produce the following effect?

我用clang-format格式化了下面的代码,但是效果不是我想要的:

void f(int, int, std::vector<int>, std::map<int, int>)
{}

int main()
{
    f(
        {
    },
        {}, {1, 2, 3},
        {
            {1, 2},
            {3, 4},
        });
}

有什么选项可以让clang-format产生如下效果吗?

void f(int, int, std::vector<int>, std::map<int, int>)
{}

int main()
{
    f({}, 
      {}, 
      {1, 2, 3},
      {
          {1, 2},
          {3, 4},
      });
}

是的,使用您想要的样式。 (真的就是这么简单!)

clang-format -h 告诉您有关 clang-format 的可用选项。

  --style=<string>           - Coding style, currently supports:
                                 LLVM, GNU, Google, Chromium, Microsoft, Mozilla, WebKit.
                               Use -style=file to load style configuration from
                               .clang-format file located in one of the parent
                               directories of the source file (or current
                               directory for stdin).

在你的情况下,你可能想要 clang-format --style=LLVM.

但这不会完全您想要的。因此,您需要编写自己的样式文件。这并不难。使用 clang-format --style=file 并将样式定义放在名为 .clang-format 的文件中,该文件位于同一目录或其父目录之一中。

documentation explains exactly what you need to do. If you're more of the visual type, this 生成器可能会有帮助。

不过请注意,您最好只对“通用”基本样式进行微小调整;当你做的代码与他们习惯的其他代码截然不同时,其他程序员可能不喜欢它。有关根据需要修改以处理特定项目需求样式文件的示例,请参阅 GNU Radio 的 .clang-format 文件。