嵌套结构字段的 clang 格式规则
Clang Format Rule for Nested Struct Fields
哪个 clang 格式样式选项控制 clang 如何格式化嵌套结构字段? 如果没有,是否有任何已知的解决方法?
考虑以下假程序
void main()
{
/* ... */
struct_type thing = {
.foo = foo,
.params =
{
.start = {.stamp = 1, .when = 1},
.url = "https://httpbin.org/",
},
};
}
我们有一些安装了 clang 格式 3.8 的旧构建环境。 当我们在上面的程序上运行 clang 格式时,嵌套的结构字段最终会在同一行上
$ clang-format sample.c
/* ... */
.params =
{
.start = {.stamp = 1, .when = 1}, .url = "https://httpbin.org/",
},
/* ... */
但是,当使用 clang 格式 6.0.0 时,这些嵌套字段最终位于不同的行上。
$ clang-format sample.c
/* ... */
.params =
{
.start = {.stamp = 1, .when = 1},
.url = "https://httpbin.org/",
},
/* ... */
}
这里有人知道哪个(如果有的话)clang格式样式规则控制这个以及这些规则在哪个版本中可用?
通常,clang-format 会将结构字段放在不同的行上,就像在原始代码中一样,就像在 clang-format-6.0 的输出中一样。
我无法明确地找到控制它的选项。
但是,clang-format-3.8 强制字段在同一行上似乎是一个错误。
有一个名为BreakBeforeBinaryOperators
的字段,它控制二进制运算符的包装(请参阅 clang 格式 3.8 文档)。该字段默认为None
,这告诉 clang-format 不要在二进制运算符之前中断。问题是,clang格式错误地识别了这个结构,它正好有两个字段,作为一个二元运算符......
因此,要使用 clang 格式 3.8 解决此问题,请将BreakBeforeBinaryOperators
设置为All
。这将产生改变二进制运算符包装方式的副作用,但希望这是可以接受的(因为二进制表达式超过列限制可能并不常见)。
希望这有帮助。
顺便说一句,我通过将 3.8 和 3.8 的--dump-config
输出与-style=webkit
进行比较来发现这一点,一旦我意识到 webkit 风格没有这种错误的行为。
- 如何在openssl-ecc中获取十六进制格式的私钥
- 此代码是否违反一个定义规则
- 将"打开的CV图像"中的"颜色"转换为整数格式
- TDateTime格式在C++Builder中不会更改
- 生成文件不对文件使用隐式规则
- 变量可能尚未初始化[MIRA 2012规则9.1,强制性]
- 静态结构和一个定义规则
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 检查不带转换的扫描格式
- 当我尝试使用 sstream 和分面将 Boost Time_duration转换为字符串时,我没有得到所需的格式
- 是否可以从格式字符串中检索"width"
- clang格式:宏的缩进
- clang格式:禁用排序包含
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 将RGB图像保存为PPM格式
- 询问在设计我的手臂模拟器功能表示格式1
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 尽管遵循了规则,内存泄漏在哪里
- 嵌套结构字段的 clang 格式规则