如何防止 clang-format 在新行中添加单个分号?

How to prevent clang-format from adding a single semicolon to a new line?

我在 C++ 中有这行代码

while (fread(pixel_array++, sizeof(byte), 3, fp));

但是当我使用 clang-format 时,它会拆分分号并将其添加到新行中

while (fread(pixel_array++, sizeof(byte), 3, fp))
    ;

我不喜欢这种风格,我更喜欢保持原来的风格。

我应该如何修改我的 clang-format 配置?谢谢

fread 不 return bool 和空 while 循环没有意义。所以最好将你的代码重写为

for(;;)
{
    auto const read_bytes_count{fread(pixel_array, sizeof(byte), 3, fp)};
    if((sizeof(byte) * 3) != read_bytes_count)
    {
        // probably deal with error handling...
        break;
    }
    ++pixel_array;
}

clang-format 5.0 目前无法识别这种类型的循环。不幸的是,从 clang-format 版本 5 开始,您将无法获得满足您需要的设置。

查找 Clang Format Style Options,我发现最接近的是 AllowShortLoopsOnASingleLine: true,但该设置无法将循环条件识别为循环主体。

只要 clang-format 无法识别这些类型的循环,我要做的就是用 // clang-format off 标记您的代码,然后在您的代码块周围标记 // clang-format on

显然这是不可能的,但解决方法是用空块替换分号。如果 AllowShortLoopsOnASingleLineAllowShortBlocksOnASingleLine 都设置了,那么它将被格式化为

while (fread(pixel_array++, sizeof(byte), 3, fp)) {}