You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

clang-format使用Allman风格时如何为命名空间大括号前后添加空行

解决方案

目前可以通过两种方式实现你需要的Allman风格命名空间空行效果:

方案1:升级到Clang-Format 14及以上版本(推荐)

Clang-Format从14版本开始新增了专门的命名空间空行控制配置,和BreakBeforeBraces: Allman规则完全兼容,你只需要在现有配置中新增两行配置即可:

EmptyLineAfterNamespace: true
EmptyLineBeforeNamespaceClosing: true

修改后的完整配置如下:

---
BasedOnStyle: Google
AccessModifierOffset: -4
AlignConsecutiveDeclarations: 'true'
BinPackArguments: 'false'
BinPackParameters: 'false'
IndentWidth: '4'
AlignConsecutiveAssignments: 'true'
ColumnLimit: 120
BreakBeforeBraces: Allman
AllowShortIfStatementsOnASingleLine: false
# 新增命名空间空行配置
EmptyLineAfterNamespace: true
EmptyLineBeforeNamespaceClosing: true
...

配置完成后重新执行格式化,就能直接输出你预期的代码格式:

namespace test_a::test_b
{

struct A
{
    int a;
    int b;
};

}  // namespace test_a::test_b

方案2:低版本Clang-Format兼容方案

如果你暂时无法升级到14及以上版本,可以在clang-format格式化完成后,通过正则替换做二次处理实现效果,处理逻辑如下:

  • 匹配命名空间左大括号后直接跟非空行的场景,替换为左大括号+空行+原内容
  • 匹配命名空间右大括号前没有空行的场景,替换为空行+右大括号
    你可以把上述逻辑封装为脚本,和clang-format绑定执行即可。

内容的提问来源于stack exchange,提问作者DontCareBear

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 04:36:05