使用 clang-format 从 C++ 中的新行开始每个 <<

Posted

技术标签:

【中文标题】使用 clang-format 从 C++ 中的新行开始每个 <<【英文标题】:Start each << from a new line in C++ with clang-format 【发布时间】:2021-08-20 21:09:51 【问题描述】:

考虑以下一段 C++ 代码:

void foo() 
  std::cout << "Hello, "
    << "world!"
    << std::endl;

当我在没有任何样式选项的情况下运行 clang-format 时,我得到了这个:

void foo() 
  std::cout << "Hello, "
            << "world!" << std::endl;

如何得到如下结果(每个&lt;&lt;单独一行开始)?

void foo() 
  std::cout << "Hello, "
            << "world!"
            << std::endl;

一个advice是用//结束每一行:

void foo() 
  std::cout << "Hello, " //
    << "world!" //
    << std::endl; //

但是仅使用style options 可以实现这样的缩进吗?

【问题讨论】:

std::cout &lt;&lt; "Hello, " &lt;&lt; "world!\n"; 问题解决了:-) \nstd::endl 更常见 std::endl 仅用于演示目的;如果您使用变量(例如,const std::string s = "world!"),这同样适用。 【参考方案1】:

https://reviews.llvm.org/D80950 解释了它为什么这样做,当它最初被编写时,clang-format 做出决定,如果我们文字字符串彼此相邻流式传输,即

os << "A" << "B"

会变成

os << "A" 
   << "B"

他们会将它们放在单独的一行中,但对于其他任何事情他们都不会

os << "A" << i << "B"

这确实没有任何控制权,在每个流式操作符都被认为太多之后就中断了。

os << "A"
   << i
   << "B"

【讨论】:

以上是关于使用 clang-format 从 C++ 中的新行开始每个 <<的主要内容,如果未能解决你的问题,请参考以下文章

QtCreator:将 QtCreatorCodeStyle 与 clang-format 统一起来

将 clang-format 与 c++20 概念一起使用

clang-format 使用指示符删除数组定义中的新行

C++ 将新的类对象添加到数组中的新位置

安装了 Xcode 命令行工具的 Mac OS X 中的 clang-format 和 clang-format.py 在哪里?

clang-format 覆盖 WebKit 样式的多行注释