如何让clang格式的c++长循环变成三行

How to let clang-format format c++ long for loop into three lines?

本文关键字:三行 循环 clang 格式 c++      更新时间:2023-10-16

我希望循环的任何都能自动分成三行;类似:

for (auto origin = backup_to_origins[peer].begin();
origin != backup_to_origins[peer].end(); 
origin++)

但谷歌风格的clang格式将其格式化为两行:

for (auto origin = backup_to_origins[peer].begin();
origin != backup_to_origins[peer].end(); origin++)

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

根据行宽度,我只希望占用大于X的字符量的循环被分解为三行。<=的循环X个字符,它们可以停留在一行上。我怎样才能做到这一点?

我不知道BinPackArguments为什么不适合您。也许你还有其他风格的选择?也许clang格式的早期(或更晚?(版本的工作方式不同?我使用clang格式6.0.0来验证这个答案中的行为。

我完全明白你的要求:

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++)
{
}
}

命令行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++) {
}
}

所指的线条长度XColumnLimit样式选项控制,该选项通常默认为80。

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