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

配置uncrustify实现C宏的统一缩进(v0.74版本适配)

Uncrustify v0.74 多行宏定义缩进异常问题解决

问题场景

将Uncrustify从v0.69升级到v0.74后,格式化C代码时出现多行宏定义缩进不一致的问题:首个宏DEVICE_NAME__A_LIST中的A2_NAME被额外缩进一级,其他宏格式正常;同时发现空的*_NAME宏会触发该异常行为。尝试过pp_ignore_define_body选项,但该选项会完全忽略宏体格式化,不符合仅保留一级缩进的需求。

期望格式化效果

#if defined(CONFIG_HAS_A)
#define DEVICE_NAME__A_LIST                                                   \
    A1_NAME                                                                   \
    A2_NAME                                                                   \
    ""

#define DEVICE_NAME__A_COUNT                                                  \
    A1_COUNT +                                                                \
    A2_COUNT +                                                                \
    0
#endif

#if defined(CONFIG_HAS_B)
#define DEVICE_NAME__B_LIST                                                   \
    B1_NAME                                                                   \
    B2_NAME                                                                   \
    B3_NAME                                                                   \
    ""

#define DEVICE_NAME__B_COUNT                                                  \
    B1_COUNT +                                                                \
    B2_COUNT +                                                                \
    B3_COUNT +                                                                \
    0
#endif

v0.74实际格式化结果

#if defined(CONFIG_HAS_A)
#define DEVICE_NAME__A_LIST                                                   \
    A1_NAME                                                                   \
        A2_NAME                                                                   \
    ""

#define DEVICE_NAME__A_COUNT                                                  \
    A1_COUNT +                                                                \
    A2_COUNT +                                                                \
    0
#endif

#if defined(CONFIG_HAS_B)
#define DEVICE_NAME__B_LIST                                                   \
    B1_NAME                                                                   \
    B2_NAME                                                                   \
    B3_NAME                                                                   \
    ""

#define DEVICE_NAME__B_COUNT                                                  \
    B1_COUNT +                                                                \
    B2_COUNT +                                                                \
    B3_COUNT +                                                                \
    0
#endif

解决方案

在Uncrustify配置文件(.uncrustify.cfg)中添加或调整以下配置项,强制宏体保持统一的一级缩进,并修复空宏导致的解析异常:

  • indent_define_body = 1:指定宏定义主体的基础缩进为1级,确保所有宏体内容从同一缩进级别开始。
  • indent_define_body_cont = 0:禁止宏定义续行时增加额外缩进,避免续行内容被多级缩进。
  • pp_empty_define_align = true:让空宏在解析时保持对齐逻辑,防止空宏干扰后续宏的格式化规则。

将上述配置添加后,重新运行Uncrustify格式化代码,即可得到符合期望的统一缩进效果,同时避免pp_ignore_define_body带来的过度格式化屏蔽问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:57:33