为什么指针对齐选项不起作用?

问题描述 投票:0回答:2

我正在使用 clang-format (

version 8.0.0 (tags/google/stable/2019-01-18)
) 和样式文件,我在其中设置

…
PointerAlignment: Left
…

这成功地改变了这样的声明

const string &foo = "lorem ipsum";

进入

const string& foo = "lorem ipsum";

但是,当我也包含在我的样式文件中时

BasedOnStyle: Google

这些选项没有任何作用。由于某种原因,它们被基本样式覆盖。这对我来说似乎很荒谬——显式选项应该覆盖基本样式,不是吗? 有人可以解释一下问题是什么以及如何使用

BasedOnStyle
PointerAlignment: Left
吗?

c++ clang code-formatting clang-format
2个回答
21
投票

答案是 Google 风格(可以用

clang-format -style=google -dump-config | less
检查它)定义了

DerivePointerAlignment: true

文档是这么说的

如果为 true,则分析格式化文件中最常见的 & 和 * 对齐方式。指针和参考对齐样式将根据文件中的首选项进行更新。 PointerAlignment 仅用作后备

这意味着如果想自己处理就必须明确设置

DerivePointerAlignment: false


0
投票

这咬了我。我个人认为使用默认值覆盖特定设置值的未记录选项是愚蠢的。如果有人专门将 PointerAlignment 设置为左(或右),为什么程序会决定忽略该设置,尤其是在不生成错误的情况下。 PointerAlignment:Left 似乎在我扫描的 99% 的文件中都有效,但在少数文件中失败了。使测试变得困难。

还有其他值可以这样工作吗?该选项似乎有效,但在某些文件中失败,因为某些隐藏的未记录的已弃用功能覆盖了特定设置?

© www.soinside.com 2019 - 2024. All rights reserved.