Подтвердить что ты не робот

Как я могу отступать на С++ pragma, используя clang-format?

Я использую vim-autoformat, который использует clang-format в качестве внешнего форматирования.

Кажется, что clang-format не будет отступать от С++ #pragma. Например:

#include <omp.h>
#include <cstdio>
int main()
{
#pragma omp parallel for
    for (int i = 0; i < 10; ++i)
    {
        puts("demo");
    }
    return 0;
}

Я хотел бы, чтобы он был отформатирован в:

#include <omp.h>
#include <cstdio>
int main()
{
    #pragma omp parallel for
    for (int i = 0; i < 10; ++i)
    {
        puts("demo");
    }
    return 0;
}

Я проверил clangformat, но не нашел, какую опцию я мог бы использовать.

4b9b3361

Ответ 1

Было уже поздно, но это решение, которое вы ищете. Он форматирует прагму вместе с блоком кода.

https://github.com/MedicineYeh/p-clang-format

Основная концепция заключается в замене строки так, чтобы форматтер использовал "правильные" правила для этих прагм. Мотивационный пример следующий.

# Replace "#pragma omp" by "//#pragma omp"
sed -i 's/#pragma omp/\/\/#pragma omp/g' ./main.c
# Do format
clang-format ./main.c
# Replace "// *#pragma omp" by "#pragma omp"
sed -i 's/\/\/ *#pragma omp/#pragma omp/g' ./main.c