告诉clang-format忽略编译指示

jli*_*cht 10 c++ clang-format

clang-format目前将所有pragma移动到第一列.clang格式之前的一个例子:

for (int i = 0; i < 4; ++i) {
  #pragma UNROLL
  // ...some code...
}
Run Code Online (Sandbox Code Playgroud)

clang格式后的相同代码:

for (int i = 0; i < 4; ++i) {
#pragma UNROLL
  // ...some code...
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让clang-format完全忽略pragma行而不改变源代码(即不会混淆源代码// clang-format off)?例如使用正则表达式?

这与此问题有关(我希望避免安装第三方工具),并希望通过此错误报告解决.


另外,虽然clang-format off对于带有pragma的行是受到尊重的,但是注释行本身将缩进到pragma 将缩进到的内容(使用clang-format 6.0.0):

for (int i = 0; i < 4; ++i) {
// clang-format off
  #pragma UNROLL
  // clang-format on
  // ...some code...
}
Run Code Online (Sandbox Code Playgroud)

小智 0

如果您只使用很少的编译指示,您可以尝试将它们伪装成常规命令。根据编译器资源管理器,以下内容对编译器具有正确的效果,而格式不会被 clang-format 破坏。

另一个好处是,您可以使用不同的定义,具体取决于编译器(如本问题所示)

#define UNROLL _Pragma("unroll")

void f()
{
    volatile int x = 0;
    UNROLL for (int i = 0; i < 100; ++i)
    {
        x = x + i;
    }
}
Run Code Online (Sandbox Code Playgroud)