我正在做一个c++项目,在那里我使用了很多#pragma omp。我使用了美妙的clang格式来保持整洁,但它总是删除所有预处理器指令的缩进。有没有办法改变这种行为?或者有其他更值得推荐的格式化工具?或者我应该避免使用这些工具吗?
#pragma omp
y0u0uwnf1#
从6.0版开始,可以使用选项IndentPPDirectives。用法在this review中描述。使用IndentPPDirectives: None会导致:
IndentPPDirectives
IndentPPDirectives: None
#if FOO #if BAR #include <foo> #endif #endif
而IndentPPDirectives: AfterHash给出:
IndentPPDirectives: AfterHash
#if FOO # if BAR # include <foo> # endif #endif
编辑:有关clang-format版本9中引入的BeforeHash选项的详细信息,请参阅@Gabriel斯台普斯的answer。
clang-format
BeforeHash
mklgxw1f2#
你可能只想自己打补丁,然后提出一个pull request。这并不难,我曾经做过一个类似的普通pull请求。clang-format代码非常整洁。Clang-format已经按照你想要的方式处理代码注解,将它们与周围的代码对齐(至少它有一个选项来启用这一点),所以制作一个补丁来以相同的方式处理某些PP指令应该很简单。或者,你可以自己编写补丁,然后使用额外的选项从源代码编译clang,以便在你的项目中使用。在我决定把补丁发给他们之前,我也是这么做的。我只花了几个小时就想出了如何做到这一点,他们的代码比许多其他开源项目的代码干净得多。
icnyk63a3#
通过手动检查各种Clang-Format样式选项页面,我已经确定了as of Clang-format version 9,第三个(在我看来也是最好的)选项,称为BeforeHash。
.clang-format
示例:
#
IndentPPDirectives: BeforeHash
...以便您可以访问上面的版本9或更高版本的功能:参见my detailed instructions here,目前最新版本为14.0.0。
1.对于所有这些文档,以及我上面使用的确切示例的来源,请参阅LLVM Clang-format Style Options官方文档的IndentPPDirectives部分:https://clang.llvm.org/docs/ClangFormatStyleOptions.html .
1.另请参阅我的基于clang-format的项目:eRCaGuy_CodeFormatter
9vw9lbht4#
虽然已经晚了,但这是你正在寻找的解决方案。它将编译指示与代码块沿着格式化。你可以在他们最终支持编译指示缩进之前使用它。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
bcs8qyzn5#
astyle(艺术风格)使用代码很好地缩进了#pragma omp,开箱即用。甚至似乎没有改变行为的选项。只有行的延续部分没有缩进,如示例所示-我更希望行的延续部分缩进,也许8个空格,在omp下。其他杂注左对齐。
astyle
omp
void foo() { #pragma omp parallel #pragma omp master { #pragma omp task depend( some_expression ) \ depend( other_expression ) \ priority(1) { code(); } } #pragma other code(); }
变成
有一个Astyle Visual Studio extension。
5条答案
按热度按时间y0u0uwnf1#
从6.0版开始,可以使用选项
IndentPPDirectives
。用法在this review中描述。使用
IndentPPDirectives: None
会导致:而
IndentPPDirectives: AfterHash
给出:编辑:有关
clang-format
版本9中引入的BeforeHash
选项的详细信息,请参阅@Gabriel斯台普斯的answer。mklgxw1f2#
你可能只想自己打补丁,然后提出一个pull request。
这并不难,我曾经做过一个类似的普通pull请求。clang-format代码非常整洁。Clang-format已经按照你想要的方式处理代码注解,将它们与周围的代码对齐(至少它有一个选项来启用这一点),所以制作一个补丁来以相同的方式处理某些PP指令应该很简单。
或者,你可以自己编写补丁,然后使用额外的选项从源代码编译clang,以便在你的项目中使用。在我决定把补丁发给他们之前,我也是这么做的。
我只花了几个小时就想出了如何做到这一点,他们的代码比许多其他开源项目的代码干净得多。
icnyk63a3#
通过手动检查各种Clang-Format样式选项页面,我已经确定了as of Clang-format version 9,第三个(在我看来也是最好的)选项,称为
BeforeHash
。在
.clang-format
文件中,您可以指定3个选项,如下所示:1.不缩进
示例:
2. hash后缩进(
#
)示例:
3.(我认为最新最好的选择--从Clang-Format version 9开始可用)在hash之前缩进(
#
)示例:
如何在Ubuntu上安装 * 最新 * 版本的
clang-format
...以便您可以访问上面的版本9或更高版本的功能:
参见my detailed instructions here,目前最新版本为14.0.0。
参考文献
1.对于所有这些文档,以及我上面使用的确切示例的来源,请参阅LLVM Clang-format Style Options官方文档的IndentPPDirectives部分:https://clang.llvm.org/docs/ClangFormatStyleOptions.html .
相关
1.另请参阅我的基于
clang-format
的项目:eRCaGuy_CodeFormatter9vw9lbht4#
虽然已经晚了,但这是你正在寻找的解决方案。它将编译指示与代码块沿着格式化。你可以在他们最终支持编译指示缩进之前使用它。
https://github.com/MedicineYeh/p-clang-format
主要概念是替换字符串,以便格式化程序在这些杂注上使用“正确”的规则。
bcs8qyzn5#
astyle
(艺术风格)使用代码很好地缩进了#pragma omp
,开箱即用。甚至似乎没有改变行为的选项。只有行的延续部分没有缩进,如示例所示-我更希望行的延续部分缩进,也许8个空格,在omp
下。其他杂注左对齐。变成
有一个Astyle Visual Studio extension。