C 如何更改“铿锵格式”选项以防止制动支架

C 如何更改“铿锵格式”选项以防止制动支架,c,clang,clang-format,C,Clang,Clang Format,我有一个名为asdf.C的C文件(即使它没有编译,您也可以重现这个问题): 现在,如果我运行clangformat-iasdf.c(使用版本6.0.1,但我也可以用版本5复制),我会让clangformat为我进行格式化 然而,我希望我的代码符合一些要求(毕竟,我是用C语言编程的,而不是C++),所以我同时使用它来检查我的代码风格。然而,Checkpatch却在抱怨clangformat如何格式化代码: src/asdf.c:2: ERROR: that open brace { should

我有一个名为
asdf.C
的C文件(即使它没有编译,您也可以重现这个问题):

现在,如果我运行
clangformat-iasdf.c
(使用版本6.0.1,但我也可以用版本5复制),我会让
clangformat
为我进行格式化

然而,我希望我的代码符合一些要求(毕竟,我是用C语言编程的,而不是C++),所以我同时使用它来检查我的代码风格。然而,Checkpatch却在抱怨
clangformat
如何格式化代码:

src/asdf.c:2: ERROR: that open brace { should be on the previous line
src/asdf.c:4: WARNING: Statements should start on a tabstop
src/asdf.c:4: ERROR: that open brace { should be on the previous line
src/asdf.c:10: WARNING: Statements should start on a tabstop
src/asdf.c:10: ERROR: that open brace { should be on the previous line
src/asdf.c:16: WARNING: Statements should start on a tabstop
src/asdf.c:16: ERROR: that open brace { should be on the previous line
src/asdf.c:22: WARNING: Statements should start on a tabstop
src/asdf.c:22: ERROR: that open brace { should be on the previous line
src/asdf.c:28: WARNING: Statements should start on a tabstop
src/asdf.c:28: ERROR: that open brace { should be on the previous line
src/asdf.c:34: WARNING: Statements should start on a tabstop
src/asdf.c:34: ERROR: that open brace { should be on the previous line
我的问题是,如何配置
clangformat
以避免这些错误/警告

我当前的
.clang格式
配置如下:

BasedOnStyle: LLVM
IndentWidth: 8
UseTab: Always
BreakBeforeBraces: Linux
AllowShortIfStatementsOnASingleLine: false
IndentCaseLabels: false
AllowShortFunctionsOnASingleLine: false
AllowShortLoopsOnASingleLine: false

如果将
breakbeforebaryOperators:All
添加到
.clang format
文件中,则clang format不会在代码中包装前几行中的大括号。例如,以下代码不会被clang格式错误格式化:

struct turn_parameters turns[][NUM_MODES] = {
    [MOVE_LEFT] = {
        {0.02, .448, 166, 260, -3. * PI},
        {0.02, .448, 166, 260, -3. * PI},
        {0.02, .448, 166, 260, -3. * PI},
    },
    [MOVE_RIGHT] = {
        {0.02, .448, 166, 260, 3. * PI},
        {0.02, .448, 166, 260, 3. * PI},
        {0.02, .448, 166, 260, 3. * PI},
    },
};

您是否查看或阅读了。@Myst是的,正如您所看到的,我当前的
.clangformat
配置与示例中提供的配置相匹配(加上一些规则以防止在单行上出现短函数/循环)。此外,即使我使用Linux内核中的
.clangformat
配置文件,结果的样式也与
checkpatch.pl
预期的格式冲突(即:开放大括号{应在前一行)。根据指南,有时“[
clangformat
]不是完美的,也不是覆盖每一个案例,但它是足够好的帮助“……考虑在麻烦部分和手工格式化之前,添加<代码> // CLAN格式关闭< <代码> >(使用< <代码> /CLAN格式> <代码>重新激活).@Myst可能不是我想要的答案,但这实际上是一个解决办法。:-)谢谢。这实际上解决了提供的源代码示例的问题。遗憾的是,这对源代码的其余部分产生了一些意外的副作用(需要许多更改)。我希望有一个选项可以仅对大括号“{”,但保留了所有二进制运算符的样式。
struct turn_parameters turns[][NUM_MODES] = {
    [MOVE_LEFT] = {
        {0.02, .448, 166, 260, -3. * PI},
        {0.02, .448, 166, 260, -3. * PI},
        {0.02, .448, 166, 260, -3. * PI},
    },
    [MOVE_RIGHT] = {
        {0.02, .448, 166, 260, 3. * PI},
        {0.02, .448, 166, 260, 3. * PI},
        {0.02, .448, 166, 260, 3. * PI},
    },
};