多行的 clang 格式数组初始化程序?

clang-format array initialiser over multiple lines?

我希望能够编写以下代码:

float positions[] =
{
    -0.5f, -0.5f,
     0.5f, -0.5f,
     0.5f,  0.5f,
    -0.5f,  0.5f
};

但是 clang-format 一直将初始化程序格式化为一行。

我找不到像上面那样允许它们跨越一行或多行的设置。 This 问题类似,但没有解决我的问题,因为它假设引擎允许多行初始化。

我缺少什么设置?我查看了所有选项,但似乎找不到它。

这可以通过在 clang-format off/on 注释中包装代码来解决。 clang-format 在一行中格式化,但如果你想暂时禁用 clang-format,你可以这样做:

// clang-format off
float positions[] =
{
    -0.5f, -0.5f,
     0.5f, -0.5f,
     0.5f,  0.5f,
    -0.5f,  0.5f
};
// clang-format on

从格式化程序的角度来看,您的安排没有任何意义。您有一个初始化列表,并要求格式化程序将其安排在每行两个元素中。但是初始值设定项列表没有语义,甚至根本无法暗示其元素成对相关。

如果您的元素应该成对分组,那么很可能您需要实际将它们“分组”在一个有意义的结构中。这不仅是为了格式化,而且首先是为了代码的完整性。例如:

struct Point { float x; float y; };

Point positions[] =
{
    {-0.5f, -0.5f},
    {0.5f, -0.5f},
    {0.5f,  0.5f},
    {-0.5f,  0.5f}
};

我还强烈建议停止使用 C 数组。使用 std::vectorstd::array:

struct Point { float x; float y; };

std::array<Point, 4> positions =
{{
    {-0.5f, -0.5f},
    {0.5f, -0.5f},
    {0.5f,  0.5f},
    {-0.5f,  0.5f}
}};