配置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
相关产品推荐
相关产品推荐

