枚举的 clang 格式样式选项

Posted

技术标签:

【中文标题】枚举的 clang 格式样式选项【英文标题】:clang-format style options for enums 【发布时间】:2014-05-29 03:05:45 【问题描述】:

有谁知道如何配置 clang-format 以将枚举保持在单独的行上?

enum 
    ONE,
    TOW,
    THREE
;

对比

enum ONE, TWO, THREE;

编辑:

这是我用来匹配 Apple 的 Objective-C 样式指南的样式选项。

http://pastebin.com/0cTEhvBv

【问题讨论】:

我刚刚尝试了所有预定义的 clang 格式样式并将单行枚举(您的第二个示例)转换为断行枚举(您的第一个示例)。这不是你想要的吗? 是的,预定义的 LLVM、CPP 等样式确实会破坏它们,这是正确的,我想要这样,但我使用的配置文件设置了一堆样式选项以匹配 Apple 的 Objective-C 样式指导和其中一个(不知道是哪一个),改变行为并取消线路并将枚举放入一行。我编辑了 OP 以包含我的样式选项。 我无法重现这种行为。我正在使用你的配置文件,但我仍然遇到断行枚举。 【参考方案1】:

这是在某个阶段有意引入的(因此,如果您无法重现该行为,您可能使用的是旧版本)。

如果所有元素都适合一行,则clang-format 会将枚举收缩为一行。这可以节省空间并且通常不会降低可读性。没有样式选项,但您可以通过在某处添加行注释或在最后一个枚举数后添加尾随逗号来覆盖它,例如:

enum 
    ONE,
    TOW,
    THREE,
;

enum 
    ONE,  // This means ...
    TOW,
    THREE
;

【讨论】:

你不知道,如何对积木实现同样的效果?【参考方案2】:

根据this answer,将ColumnLimit 设置为0 也将实现此行为。

【讨论】:

【参考方案3】:

另一种解决方案是使用:

BraceWrapping:
  AfterEnum: true

这将导致以下结果:

enum 

    ONE,
    TOW,
    THREE,
;

这并不理想,因为它会在 之前强制换行,但我认为这是值得考虑的,因为 ColumnLimit = 0 禁用所有智能代码包装,很多人可能会觉得不值得放弃。

【讨论】:

【参考方案4】:
AllowShortEnumsOnASingleLine: false

您可能需要更新版本的 clang-format 来支持这一点。 来自https://clang.llvm.org/docs/ClangFormatStyleOptions.html

【讨论】:

以上是关于枚举的 clang 格式样式选项的主要内容,如果未能解决你的问题,请参考以下文章

clang-format代码格式化风格选项详细说明

如何指定 clang 格式的文件?

如何将括号与它们包含的代码对齐?

VS2019 中的 Clang 选项

Clang编译选项和Pass构建

推荐的 Clang 命令行选项