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

如何配置.clang-format 格式化时不修改嵌套结构体原有格式

.clang-format配置修改方案

这个嵌套结构体数组被强制折行的问题,是clang-format默认的C++11花括号列表格式化规则导致的,按以下方式调整配置即可保留原有手写格式:

全局配置调整

在.clang-format文件中修改/添加以下配置项即可:

# 保留你原本使用的基础风格,例如LLVM/Google/Chromium/Mozilla均可
BasedOnStyle: 你原本用的基础风格
# 关闭C++11风格的花括号列表强制折行规则,适配C风格结构体初始化写法
Cpp11BracedListStyle: false
# 关闭结构体数组自动列对齐,不覆盖你手动调整的对齐空格
AlignArrayOfStructures: None
# 允许初始化列表元素按需打包在同一行
BinPackArguments: true
# 允许短初始化列表整体放在同一行,不强制拆分元素
AllowAllArgumentsOnNextLine: true
# 按日常习惯设置列宽,建议不低于80,避免短条目被误判折行
ColumnLimit: 120
# 调高折行惩罚值,减少无必要的单行拆分
PenaltyBreakBeforeFirstCallParameter: 100

单段代码豁免方案

如果不想改全局格式化规则,只需要保留这一个菜单数组的原有格式,直接在代码段上下加clang-format开关注释就行,标记区间内的代码会被格式化工具完全跳过,不会做任何排版修改:

// clang-format off
struct NewMenu appMenu[] =
{
  { NM_TITLE,  "Project",                      0 , 0, 0, 0 },
  {  NM_ITEM,  "Open..",                      "O", 0, 0, (APTR)MID_ProjectOpenAnim },
  {  NM_ITEM,  "Save",                         0 , 0, 0, (APTR)MID_ProjectSave },
  {  NM_ITEM,  "Save as..",                   "S", 0, 0, (APTR)MID_ProjectSaveAs },
  {  NM_ITEM,  "Export",                       0,  0, 0, 0 },
  {    NM_SUB, "IFF ILBM Sheet",               0,  0, 0, (APTR)MID_ProjectExportToIlbm },
  {    NM_SUB, "AMOS ABK",                     0,  0, 0, (APTR)MID_ProjectExportToAbk },
  {  NM_ITEM,  NM_BARLABEL,                    0 , 0, 0, 0, },
  {  NM_ITEM,  "About",                        0 , 0, 0, (APTR)MID_ProjectAbout },
  {  NM_ITEM,  NM_BARLABEL,                    0 , 0, 0, 0, },
  {  NM_ITEM,  "Quit",                        "Q", 0, 0, (APTR)MID_ProjectQuit },
  { NM_TITLE,  "Anim sheet",                   0 , 0, 0, 0, },
  {  NM_ITEM,  "Append..",                     0 , 0, 0, (APTR)MID_SheetAppend },
  {  NM_ITEM,  "Fit to raster (horiz.)",       0 , 0, 0, (APTR)MID_SheetFitToRaster },
  { NM_TITLE,  "Tools",                        0 , 0, 0, 0, },
  {  NM_ITEM,  "Print frame mask (planar)",   "P", 0, 0, (APTR)MID_ToolsPrintFrameMask },
  {  NM_ITEM,  "Print frame mask (interl.)",  "I", 0, 0, (APTR)MID_ToolsPrintInterleavedFrameMask },
  {  NM_ITEM,  "Print mask of whole picture", "M", 0, 0, (APTR)MID_ToolsPrintFullMask },
  { NM_END,    0,                              0 , 0, 0, 0, },
};
// clang-format on

你遇到的NM_BARLABEL对应条目被拆成每个元素占一行的情况,就是默认规则下clang-format判定该条目不符合装箱排版要求触发的强制折行,上述全局配置调整后就不会再出现这类无意义拆分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:15:34