如何设置 clang 格式以保持返回类型和 protoype 在同一行中

How to set-up clang format to keep return type and protoype in the same line

提问人:Francois 提问时间:11/8/2023 最后编辑:Francois 更新时间:11/11/2023 访问量:48

问:

我正在发现 clang-format。我将 ColumnLimit 设置为 120。一般来说,这效果很好,这意味着在不同的行上设置函数参数。

void myLongFunctionNameMoreThan120Col(int foo,
                                      float barbar,
                                      float* aLongPointerName,
                                      float* anotherVeryLongPointerName);

但对于长返回类型,函数名称位于返回类型之外的另一行上:

LONGTYPE
myLongFunctionNameMoreThan120Col(int foo, float barbar, float* aLongPointerName, float* anotherVeryLongPointerName);

如何告诉 clang-format 始终表现得像第一种情况一样?

我尝试了更长的变量名称来强制格式化。解决方案不令人满意,我不应该修改我的变量名称。

LONGTYPE myLongFunctionNameMoreThan120Col(int foo,
                                          float barbarTotoLong,
                                          float* aLongPointerName,
                                          float* anotherVeryLongPointerName);
C 格式 CLANG 格式

评论


答:

0赞 timiimit 11/11/2023 #1

有关样式选项的文档指定了您需要了解的有关任何特定选项的所有信息。

您正在寻找的选项是 。价值的含义被描述为:AlwaysBreakAfterReturnType: NoneNone

返回类型后自动中断。PenaltyReturnTypeOnItsOwnLine 被考虑在内。

因此,您还可以使用 控制所需的行为。PenaltyReturnTypeOnItsOwnLine

我假设 clang-format 将尝试格式化代码,使格式化代码的总损失尽可能小。因此,您需要将其设置为相对于其他惩罚选项值较高的值。PenaltyReturnTypeOnItsOwnLine

评论

0赞 Francois 11/13/2023
谢谢你的回答。我尝试了这些参数。但 AlwaysBreakAfterReturnType 在这种特定情况下不执行任何操作,并且 PenaltyReturnTypeOnItsOwnLine 会阻止 ColumnLimit 效果。
0赞 timiimit 11/14/2023
clang-format 有一些边缘情况,它可能并不总是“看到”更好的代码格式化方法。从我对你的示例的测试中似乎就是这样。它似乎对返回类型在自己的行上和与函数名称在同一行中都感到满意。您是否尝试过按照您想要的方式手动格式化代码,然后尝试在该代码上使用 clang-format?我知道这不会自动将代码更改为您想要的格式,但这是我能想到的使其保持某种一致状态的最好方法。
0赞 timiimit 11/14/2023
此外,请确保使用最新版本的 clang-format,因为错误可能已修复。我使用了 git 中手动构建的版本来测试您的示例。