如何防止 clang 格式向新行添加单个分号

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

本文关键字:添加 单个 新行 何防止 clang 格式      更新时间:2023-10-16

我在C++中有这行代码

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

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

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

我不喜欢这种风格,我只是喜欢保留原来的风格。

我应该如何修改我的 clang 格式配置?谢谢。

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

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

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

显然这是不可能的,但解决方法可能是用空块替换分号。如果同时设置了AllowShortLoopsOnASingleLineAllowShortBlocksOnASingleLine,则其格式将设置为

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

fread 不会返回布尔值和空,而循环毫无意义。所以最好将你的代码重写为

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;
}