我正在使用clang-format
(版本3.5)与Emacs(版本24.5.2)。这是由LLVM样式中的clang-format
格式化的一段简单代码:
int main() {
std::cout << "> ";
std::string word;
while (std::cin >> word) {
std::cout << std::accumulate(word.cbegin(), word.cend(), 0,
[](int cur, char ch) {
return cur + (ch - '0');
}) << std::endl << "> ";
}
return 0;
}
请注意它是如何对齐lambda
的正文和右大括号。这种格式是否有任何逻辑,或者只是缺乏对lambda
的支持?我需要设置clang-format
的配置参数以获得更好的格式吗?
答案 0 :(得分:2)
std::accumulate(word.cbegin(), word.cend(), 0, [](int cur, char ch) { return cur + (ch - '0'); })
这里我们有一个很长的函数调用。为了清理它,我们采取长时间的论证,然后将它分成它们自己的行:
std::accumulate(word.cbegin(), word.cend(), 0,
[](int cur, char ch) { return cur + (ch - '0'); })
当我们这样做时,我们将参数缩进以与(
:
std::accumulate(word.cbegin(), word.cend(), 0,
[](int cur, char ch) { return cur + (ch - '0'); })
到目前为止一切顺利。现在我们有一个开放的{
。嗯,这意味着新的一行
std::accumulate(word.cbegin(), word.cend(), 0,
[](int cur, char ch) {
return cur + (ch - '0'); })
缩进。缩进的基础在哪里?那么,std::accumulate
的开始。添加4个空格:
std::accumulate(word.cbegin(), word.cend(), 0,
[](int cur, char ch) {
return cur + (ch - '0'); })
然后我们点击}
。新线,支持者:
std::accumulate(word.cbegin(), word.cend(), 0,
[](int cur, char ch) {
return cur + (ch - '0');
})
最后,将它嵌入到一个更大的表达式的中间,你就会得到上面的混乱。
上述内容纯粹是一个合理的故事,并非基于clang-format
的专业知识。我无法告诉你如何做得更好。
答案 1 :(得分:0)
您可能希望AlignAfterOpenBracket: false
将[]
留下来。
在我看来,在开放式支架后对齐导致浪费太多的空间,这是一个奇迹,它是如此受欢迎。使用ContinuationIndentWidth
来控制延续缩进的距离。
Lambdas仍然没有完美对齐,但至少你的lambda开口不在右边一英里。我对lambng格式的lambdas格式也不是很满意。