我正在做一个我使用了很多#pragma omp
的c++项目。我使用了非常棒的clang-format来保持整洁,但是它总是删除所有预处理器指令的缩进。有没有办法改变这种行为?或者有没有其他更值得推荐的格式化工具?或者我应该完全避免使用这些工具?
发布于 2018-02-05 00:13:10
从版本6.0开始,可以使用选项IndentPPDirectives
。在this review中描述了用法。
使用IndentPPDirectives: None
会产生以下结果:
#if FOO
#if BAR
#include <foo>
#endif
#endif
而IndentPPDirectives: AfterHash
则提供了:
#if FOO
# if BAR
# include <foo>
# endif
#endif
编辑:有关clang-format
版本9中引入的BeforeHash
选项的详细信息,请参阅@Gabriel Staples的answer。
发布于 2017-07-18 14:25:37
虽然已经很晚了,但这就是你正在寻找的解决方案。它将编译指示与代码块一起格式化。你可以在他们最终支持编译指示缩进之前使用它。
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
发布于 2019-11-01 15:04:26
astyle
(艺术风格)用开箱即用的代码很好地缩进了#pragma omp
。甚至看起来都没有改变行为的选项。只有行连续没有缩进,如示例所示-我更喜欢在omp
下缩进行连续,可能是8个空格。其他编译指示左对齐。
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();
}
https://stackoverflow.com/questions/24476165
复制相似问题