【问题标题】:How could I indent C++ pragma using clang-format?我如何使用 clang-format 缩进 C++ pragma?
【发布时间】:2015-09-29 23:15:23
【问题描述】:

我正在使用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,但没有找到我可以使用的选项。

【问题讨论】:

  • 可能是因为传统上预处理器指令必须从行的第一列开始?
  • 你有没有找到任何解决方案(否则重新解析)?
  • 2021 年 1 月更新 -- 根据我的研究,clang-format 12 似乎计划引入一个名为 IndentPragmas 的字段来解决此问题。但是,在我构建的 clang-format 二进制文件(版本 12)中,此选项似乎没有实现。希望这能提供一些更新。

标签: c++ coding-style clang-format


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答。请在您的答案中包含代码的相关部分。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    • 2016-12-29
    • 2015-05-25
    相关资源
    最近更新 更多