daw*_*eck 23 c++ code-cleanup clang-format
我正在开发一个c ++项目,我正在使用它#pragma omp.我使用精彩的clang格式来整理,但它总是删除所有预处理器指令的缩进.有没有办法改变这种行为?或者是否有其他格式化工具更值得推荐?或者我应该避免使用这些工具?
通过手动检查各种 Clang-Format 样式选项页面,我确定从 Clang-format 版本 9 开始,出现了第三个(在我看来最好的)选项,称为BeforeHash.
注意:截至撰写本文时,Clang 12 已发布。有关当前发布的任何版本的最新 Clang 格式选项文档,请参阅此处: https: //clang.llvm.org/docs/ClangFormatStyleOptions.html。
因此,您可以在.clang-format文件中指定 3 个选项,如下所示:
IndentPPDirectives: None
Run Code Online (Sandbox Code Playgroud)
例子:
#if FOO
#if BAR
#include <foo>
#endif
#endif
Run Code Online (Sandbox Code Playgroud)
#)IndentPPDirectives: AfterHash
Run Code Online (Sandbox Code Playgroud)
例子:
#if FOO
# if BAR
# include <foo>
# endif
#endif
Run Code Online (Sandbox Code Playgroud)
#)IndentPPDirectives: BeforeHash
Run Code Online (Sandbox Code Playgroud)
例子:
#if FOO
#if BAR
#include <foo>
#endif
#endif
Run Code Online (Sandbox Code Playgroud)
clang-format...这样您就可以访问上面的版本 9 或更高版本的功能:
请参阅此处的详细说明。目前最新版本是14.0.0。
clang-format基于项目:eRCaGuy_CodeFormatter您可能只想自己修补它并发出拉取请求.
这并不难,我做了一次同样普通的拉动请求.clang格式代码非常整洁.Clang格式已经按照您想要的方式处理代码注释,将它们与周围的代码对齐(至少它有一个选项来启用它),因此制作补丁以同样的方式处理某些PP指令应该是直截了当的.
或者,您可以自己编写补丁并使用额外选项从源代码编译,以便在项目中使用.在我决定发送修补程序之前,我也做过这个.
我认真地花了几个小时来弄清楚如何做到这一点,他们的代码比许多其他开源项目的代码要清晰得多.
虽然已经晚了,但这就是您正在寻找的解决方案。它将编译指示与代码块一起格式化。您可以在它们最终支持编译指示缩进之前使用它。
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
Run Code Online (Sandbox Code Playgroud)
从6.0版开始,IndentPPDirectives可以使用该选项。在此评论中描述了用法。
IndentPPDirectives: None在以下结果中使用结果:
#if FOO
#if BAR
#include <foo>
#endif
#endif
Run Code Online (Sandbox Code Playgroud)
虽然IndentPPDirectives: AfterHash给出:
#if FOO
# if BAR
# include <foo>
# endif
#endif
Run Code Online (Sandbox Code Playgroud)