clang 格式,数组初始化器

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

在我们的项目中,我们有时在一行上初始化数组,有时我们将它们初始化为块。那就是

strings::UniChar const s[] = {'H', 'e', 'l', 'l', 'o'};

字符串::UniChar const s[] = 
{
  'H', 
  'e', 
  'l', 
  'l', 
  'o'
};

我希望

clang-format
能够区分这两种类型,而不是将第二个类型转换为第一个类型或对齐左大括号后的元素。事情不是这样的:

strings::UniChar const s[] = {'H', 
                              'e', 
                              'l', 
                              'l', 
                              'o'};

有没有办法使用配置文件来实现这一点?

c++ clang-format
4个回答
29
投票

在最后一个数组元素后添加逗号会导致 clang-format (在 v6.0.0 中尝试)将元素对齐到左侧,就像第二个示例一样。

// With a trailing comma.
char buf[] = {
  'a',
  'b',
};

// Without a trailing comma.
char buf2[] = {'a', 'b'};

10
投票

尝试“Cpp11BrcedListStyle:false”


5
投票

您可以使用

//
强制换行:

strings::UniChar const s[] = {
    'H',  //
    'e',  //
    'l',  //
    'l',  //
    'o'   //
};

0
投票

这是一个绝对相关的问题,因为仍然无法禁用数组初始值设定项的装箱。

最灵活的选项是使用注释,因为它可以让您将数组格式化为任何内容,包括视觉上不同的矩阵,例如:

static constexpr bool shape[] = {
    0, 1, 0, //
    1, 1, 1, //
    0, 1, 1, //
};

如果没有注释,

clang-format
会将该数组放在一行中并打破列限制,并且无法通过更改配置文件来阻止它。

如果您不关心这一点并且只想要 1 列初始化,那么已经提到的

Cpp11BracedListStyle: false
就足够了。

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