我有兴趣为函数添加一个大括号(但不是if语句和其他上下文)。例如
void foo()
{
...
}
除了火焰战,不这样做是否有充分的理由?虽然我对if / else和less块使用相同的开放括号,但我认为在这种情况下,更大的代码单元(函数/方法/类/结构)的可视化组织可以胜过完美的一致性。
此外,我如何让clang-format遵循这种风格?
答案 0 :(得分:18)
如documentation所述,使用clang-format
调用-style=file
,并使用放置在封闭目录中的.clang-format
文件来自定义样式选项。指定括号放置的格式样式选项称为BreakBeforeBraces
。来自文档,
BreakBeforeBraces (
BraceBreakingStyle
)支撑打破风格 使用
可能的值:
BS_Attach
(在配置中:Attach
)始终将大括号附加到周围的上下文中。BS_Linux
(在配置中:Linux
)与Attach
类似,但在函数,命名空间和类定义的大括号之前中断。BS_Stroustrup
(在配置中:Stroustrup
)与Attach
类似,但在功能定义和“其他”之前中断。BS_Allman
(在配置中:Allman
)在括号之前总是断开。BS_GNU
(在配置中:GNU
)总是在大括号之前中断并为控制语句的大括号添加额外级别的缩进,而不是 类,功能或其他定义。
与您的说明匹配的样式为BS_Stroustrup
。将以下条目添加到.clang-format
BreakBeforeBraces: Stroustrup
除文档外,clangformat.com列出了所有选项,并通过示例说明了其中许多选项。
答案 1 :(得分:9)
Pradhan有一个excellent answer,但你可能会发现你不想要它们就会得到休息(正如我发现的那样)。
还有另一个选项,“自定义”,至少是clang格式版本3.8和5(我使用3.8并在5个文档中找到了BS_Custom)。有了这个,您可以在BraceWrapping中指定您想要的内容,包括“AfterFunction”选项。
在下面的示例摘录中,我将其他人列为true / false,因为OP的问题仅指定AfterFunction(即“在打开函数括号之前”):
BraceWrapping:
AfterClass: true
AfterControlStatement: true
AfterEnum: true/false
AfterFunction: true
AfterNamespace: true/false
AfterObjCDeclaration: true/false
AfterStruct: true/false
AfterUnion: true/false
BeforeCatch: true/false
BeforeElse: true/false
IndentBraces: true/false
BreakBeforeBraces: Custom
我已经使用我的配置对此进行了测试,它可以更好地控制支撑破碎。