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

能否配置clang-format对齐switch中C++20 using enum与case的缩进?

clang-format中switch内using enum与case缩进对齐问题的处理

问题场景

C++20允许在switch块内使用using enum语句简化枚举成员的引用,示例代码如下:

switch (val) {
using enum SomeEnum;
case SomeValue:
    doSomething(val);
case SomeOtherValue:
    doSomethingElse(val);
default:
    break;
}

当配置IndentCaseLabels: false(使case标签与switch保持同一缩进层级)时,clang-format 15和17版本会错误地缩进using enum语句,导致其与case标签的缩进不一致:

switch (val) {
    using enum SomeEnum;
case SomeValue:
    doSomething(val);
case SomeOtherValue:
    doSomethingElse(val);
default:
    break;
}

配置项现状

目前clang-format的官方配置选项中,没有专门针对switch块内using enum语句的缩进控制项,无法通过修改配置直接实现它与case标签的同层级对齐。

临时解决方法

若需临时规避该问题,可采用以下两种方式:

  • 注释锁定格式:在using enum语句前后添加clang-format的控制注释,强制跳过该部分的格式化:
    switch (val) {
    // clang-format off
    using enum SomeEnum;
    // clang-format on
    case SomeValue:
        doSomething(val);
    case SomeOtherValue:
        doSomethingElse(val);
    default:
        break;
    }
    
  • 提交官方修复请求:该问题属于clang-format对C++20新特性的支持疏漏,可在LLVM项目的issue跟踪系统中提交问题,推动官方修复此格式错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 21:27:25