如何让clang格式的c++ long for循环分成三行?

Phi*_*ips 6 c++ clang-format

我希望任何长的for 循环都能自动分成三行;喜欢:

    for (auto origin = backup_to_origins[peer].begin();
         origin != backup_to_origins[peer].end(); 
         origin++)
Run Code Online (Sandbox Code Playgroud)

但是 google 风格的 clang-format 将其格式化为两行:

    for (auto origin = backup_to_origins[peer].begin();
         origin != backup_to_origins[peer].end(); origin++)
Run Code Online (Sandbox Code Playgroud)

BinPackArguments选项将每个 for 循环分成三行,包括短行,这不是我想要的。

基于线宽,我只希望占用超过X字符数量的循环被分成三行。<=X字符的循环,它们可以保留在一行上。我怎样才能做到这一点?

Eri*_*kus 0

我不确定为什么BinPackArguments不适合你。也许您还设置了其他样式选项?也许早期(或更高版本?)版本的 clang-format 的工作方式有所不同?我使用 clang-format 6.0.0 来验证此答案中的行为。

我完全明白你的要求:

BinPackArguments: false
Run Code Online (Sandbox Code Playgroud)

例如,给定 myfile.cpp 包含以下内容:

int f()
{
    for (auto origin = backup_to_origins[peer].begin();
         origin != backup_to_origins[peer].end(); 
         origin++)
    {
    }
    for (auto o = b.begin();
         o != b.end();
         o++)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

命令行clang-format -style='{BasedOnStyle: Google,BinPackArguments: false}' myfile.cpp产生以下输出:

int f() {
  for (auto origin = backup_to_origins[peer].begin();
       origin != backup_to_origins[peer].end();
       origin++) {
  }
  for (auto o = b.begin(); o != b.end(); o++) {
  }
}
Run Code Online (Sandbox Code Playgroud)

您所指的行长X由 style 选项控制ColumnLimit,通常默认为 80。

有关这些样式选项的更多详细信息,请参阅文档。