Как запретить clang-формату добавлять одну точку с запятой в новую строку?

У меня есть эта строка кода на C++

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

но когда я использую формат clang, он разделяет точку с запятой и добавляет его в новую строку

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

Мне не нравится этот стиль, и я просто предпочитаю сохранить оригинальный.

Как мне изменить конфигурацию моего clang-формата? Благодарю.

2 ответа

Решение

clang-format 5.0 в настоящее время не распознает этот тип цикла. К сожалению, начиная с версии 5 в формате clang, вы не получите настройки, которая делает то, что вам нужно.

Просматривая параметры стиля формата Clang, я обнаружил, что AllowShortLoopsOnASingleLine: true, но этот параметр не распознает условие цикла как тело цикла.

Пока формат clang не распознает циклы такого рода, я бы пометил ваш код // clang-format off а потом // clang-format on вокруг вашего блока кода.

По-видимому, это невозможно, но обходной путь может заключаться в замене точки с запятой пустым блоком. Если обаAllowShortLoopsOnASingleLine а также AllowShortBlocksOnASingleLine установлены, то он будет отформатирован как

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

fread не возвращает bool и пустой, в то время как цикл не имеет смысла. Так что было бы лучше переписать ваш код как

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;
}
Другие вопросы по тегам