18

我正在使用vim-autoformat,它clang-format用作外部格式化程序。

似乎clang-format不会缩进 C++ #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,但没有找到我可以使用的选项。

4

2 回答 2

3

已经很晚了,但这是您正在寻找的解决方案。它将编译指示与代码块一起格式化。

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

主要概念是替换字符串,以便格式化程序在这些 pragma 上使用“正确”规则。动机示例如下。

# 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
于 2017-07-18T06:22:19.533 回答
1

有点晚了,但clang-format最终计划使任何变通方法变得不必要。https://reviews.llvm.org/D92753引入了布尔IndentPragmas开关,以允许缩进编译指示与其周围的代码相同。

于 2021-05-03T04:46:01.077 回答