我正在进行一个 c++ 项目,在这个项目中我使用了很多 #pragma omp
。我使用了优秀的 clang-format 工具来整理代码格式,但它总是删除所有预处理指令的缩进。有没有办法改变这种行为?或者是否有其他更推荐的格式化工具?或者我应该避免使用这些工具呢?
我正在进行一个 c++ 项目,在这个项目中我使用了很多 #pragma omp
。我使用了优秀的 clang-format 工具来整理代码格式,但它总是删除所有预处理指令的缩进。有没有办法改变这种行为?或者是否有其他更推荐的格式化工具?或者我应该避免使用这些工具呢?
#pragma omp...
缩进到 #if
所在代码的级别。相反,它将根据语句在其他指令中嵌套的级别进行缩进。 - GPMuellerIndentPPDirectives: BeforeHash
选项!请看我的答案:https://dev59.com/AGAf5IYBdhLWcg3wmzpL#66004745。 - Gabriel Staples通过手动检查各种Clang-Format样式选项页面,我已经确定截至Clang-format 9版本, 第三个(也是我认为最好的)选项出现了,称为BeforeHash
。
注意:在撰写本文时,Clang 12已经发布。有关当前版本的最新Clang-format选项文档,请参见此处:https://clang.llvm.org/docs/ClangFormatStyleOptions.html。
因此,在您的.clang-format
文件中,您可以指定3个选项,如下所示:
IndentPPDirectives: None
例子:
#if FOO
#if BAR
#include <foo>
#endif
#endif
#
) 后缩进IndentPPDirectives: AfterHash
例子:
#if FOO
# if BAR
# include <foo>
# endif
#endif
#
)之前缩进IndentPPDirectives: BeforeHash
例子:
#if FOO
#if BAR
#include <foo>
#endif
#endif
clang-format
的最新版本...以便您可以访问上面的9或更高版本功能:
请参见此处的详细说明。目前的最新版本是14.0.0。
clang-format
的项目,网址为:eRCaGuy_CodeFormatter# 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
#pragma omp
可以被类似于 // AWRBHAWRBWAQ
的东西所替换。几乎任何注释都可以,只要它不是已经存在于源代码中的即可。 - user743382//#pragma omp
变成
////#pragma omp
,
然后第二个sed将其还原为
//#pragma omp
。
但是,在第二个sed中,我看不到使用\/\/ *#pragma
而不是\/\/#pragma
来匹配空格的任何理由。此外,/g
似乎是不必要的,因为每行只会有一个#pragma。所以我会这样做:sed -i 's/\/\/#pragma omp/#pragma omp/'
。 - Mark Gatesclang-format -i ./main.c
来直接编辑文件,对吗? - Mark Gatesastyle
(艺术风格)可以直接将#pragma omp
与代码整齐地缩进,甚至没有更改行为的选项。只有行继续没有缩进,如示例所示-我希望行继续缩进,可能是8个空格,在omp
下面。其他指示符左对齐。void foo()
{
#pragma omp parallel
#pragma omp master
{
#pragma omp task depend( some_expression ) \
depend( other_expression ) \
priority(1)
{
code();
}
}
#pragma other
code();
}
变成
void foo()
{
#pragma omp parallel
#pragma omp master
{
#pragma omp task depend( some_expression ) \
depend( other_expression ) \
priority(1)
{
code();
}
}
#pragma other
code();
}
#
指令标记放在行的第一列。 - Some programmer dude