Clang-format:如何以这种方式格式化 C 结构初始值设定项

问题描述 投票:0回答:2

我使用linux内核.clang-format作为参考,但这部分让我很困扰。

如何获得 clang-format 来格式化此代码

const struct my_struct hello = {.id = 0,
                                .modsmin = 10,
                                .modsmax = 20,
                                .strengthmin = 0,
                                .strengthmax = 100,
                                .color = COLOR_FOREGROUND };

到此

const struct my_struct hello = {
    .id = 0,
    .modsmin = 10,
    .modsmax = 20,
    .strengthmin = 0,
    .strengthmax = 100,
    .color = COLOR_FOREGROUND
};
c struct initializer clang-format
2个回答
11
投票

查看文档,似乎没有任何

clang-format
样式选项可以满足您的要求。

但是,您可以使用“最后一项后逗号”技巧。在最后一个指定的初始值设定项之后、最后一个右大括号之前放置一个逗号。我相信这仍然是有效的 C 代码。然后

clang-format
会将每个初始值设定项放在单独的行上,这会将缩进移回到您要查找的位置。所以输出看起来像这样:

const struct my_struct hello = {
    .id = 0,
    .modsmin = 10,
    .modsmax = 20,
    .strengthmin = 0,
    .strengthmax = 100,
    .color = COLOR_FOREGROUND,
};

这种行为没有任何记录(据我所知),所以我想它将来可能会改变。但这种行为已经存在很多年了,并且有很多版本的

clang-format
,所以我认为依赖它是合理的。


0
投票

我通过将以下内容添加到我的 .clang-format 中解决了这个问题:

Cpp11BracedListStyle: false

文档中说,如果此参数为

true
,则“在右大括号之前没有换行符”。

如果必须将此选项设置为

true
,那么其他技巧,例如在右大括号之前放置
,
//
仍然足够。

© www.soinside.com 2019 - 2024. All rights reserved.