代码之家  ›  专栏  ›  技术社区  ›  ideasman42

如何以clang格式包装结构初始值设定项?

  •  12
  • ideasman42  · 技术社区  · 7 年前

    在运行clang格式之前,请执行以下示例:

    struct ApplicationState app_state = {
        .signal = {
            .use_crash_handler = true,
            .use_abort_handler = true,
        },
        .exit_code_on_error = {
            .python = 0,
        }
    };
    

    运行后,clang格式应用如下:

    struct ApplicationState app_state = {.signal =
                                                 {
                                                         .use_crash_handler = true,
                                                         .use_abort_handler = true,
                                                 },
                                         .exit_code_on_error = {
                                                 .python = 0,
                                         }};
    

    有没有办法在大括号之后、结构成员之前添加换行符,使其更像第一个示例,而不是第二个示例?

    2 回复  |  直到 7 年前
        1
  •  10
  •   Jakuje    4 年前

    目前 clang-format 没有有效的方法来控制 .

    虽然 BreakBeforeBinaryOperators: All 强制包装(参见@eric backus的答案),它也会影响许多其他地方的格式,与结构声明无关。

    可以 但是,只需使用尾随逗号即可解决此问题。


    之前:

    struct ApplicationState app_state = {.signal =
                                                 {
                                                         .use_crash_handler = true,
                                                         .use_abort_handler = true,
                                                 },
                                         .exit_code_on_error = {
                                                 .python = 0,
                                         }};
    

    之后:

    
    struct ApplicationState app_state = {
        .signal = {
            .use_crash_handler = true,
            .use_abort_handler = true,
        },
        .exit_code_on_error = {
            .python = 0,
        },
    };
    /*   ^ notice trailing comma on the second last line! */
    
        2
  •  1
  •   Eric Backus    4 年前

    您需要的主要内容是:

    BreakBeforeBinaryOperators: All
    

    您可以将整体样式设置为 WebKit ,因为这会 BreakBeforeBinaryOperators All .

    显然,clang格式必须看到 . 作为二进制运算符。我不确定它是否 应该 ,但它似乎就是这样做的。


    我用clang格式6.0.0对此进行了测试。据推测,更新的版本也会有同样的效果,但我还没有测试过,所以我不能确定。