c语言数组换行符,C ++-lang格式换行符

本文探讨了在使用clang-format进行代码格式化时遇到的挑战,如换行控制、列限制和特定场景下的格式破坏。通过设置规则和使用特定指令,可以缓解这些问题,但有时仍需手动调整以保持代码的整洁。尽管clang-format旨在统一代码风格,但在微观控制方面可能不足,需要开发者灵活应对。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因此,弄乱了clang格式代码并进行了一些修补,这是我的两分钱:

Clang格式基于

使用clang-format解析AST,基本上消除了所有空白

将令牌序列分解为“展开的行”,就像“逻辑”代码行

应用规则/配置信息有时将“展开的行”分成较小的单元

用新的空格/缩进再次将其吐出

要尊重原始的白皮书并不容易,在您第一次解析代码时就会被扔掉。

您可以通过以下方式最轻松地控制将换行符放置在何处

设置列限制

使用“ bin pack参数”选项

设置各种中断的惩罚-在函数的返回类型之后中断,在第一个调用参数之前中断,在字符串文字之前中断,在注释之前中断...

在行末放置注释(clang格式不能删除注释,因此必须拆分行)

使用clang-format off / on指令

这是您可以尝试的一件事:

std::vector<:string> get_vec()

{

return std::vector<:string> { //

"this is a test", //

"some of the lines are longer", //

"than other, but I would like", //

"to keep them on separate lines" //

};

}

与clang-format相比,它的优点在于,如果以后更改制表符宽度或其他选项,这些代码行仍将获得那些格式更改,因此您无需手动进入// clang-format off区域进行修复。 但是,YMMV还是有点骇人听闻。

最终,clang-format就是在整个代码库上强加统一的格式,以确保所有字符串文字在程序中的任何地方都以相同的样式进行格式化。 如果您想对换行决策进行微观控制,那么这实际上并不是该工具的实质,因此您必须执行禁用它的操作。

有时这可能会令人沮丧。 当您想对数组进行处理并使列对齐或进行某些操作时,例如,这是来自lua C api的一些自然代码:

static luaL_Reg const methods[] = {

{"matches", &dispatch::intf_match_unit},

{"to_recall", &dispatch::intf_put_recall_unit},

{"to_map", &dispatch::intf_put_unit},

{"erase", &dispatch::intf_erase_unit},

{"clone", intf_copy_unit},

{"extract", &dispatch::intf_extract_unit},

{"advance", intf_advance_unit},

};

当clang-format在其上运行时,通常不会对齐右列,而是在逗号后将其固定放置一定的空格,并且afaik对此无能为力。

或者,如果您有用于OpenGL的4 x 4矩阵:

constexpr float shadow_skew_hardcoded[16] =

{ 1.0f, 0.0f, 0.0f, 0.0f,

0.5f, 0.5f, 0.0f, 0.0f,

0.0f, 0.0f, 1.0f, 0.0f,

0.0f, 0.0f, 0.0f, 1.0f };

如果让clang-format运行这样的事情,那只会破坏它们,而afaik没有简单的方法可以使它们很好地格式化,因此您只需要借助“大量琐碎的注释” hack或使用 当您遇到类似这种情况时,请关闭clang格式。 这些只是该工具的固有限制。 如果您不愿意做那样的事情,那么它可能不是您的工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值