C 如何以铿锵格式对齐函数参数名称?
是否可以使用C 如何以铿锵格式对齐函数参数名称?,c,clang,clang-format,C,Clang,Clang Format,是否可以使用clangformat将结构成员和函数参数名称格式化为列 例如: struct { int alpha; //aligned to 'b' of "beta" unsigned int beta; MyObject *gamma; //aligned with 'g' not '*' }; void foobar (int alpha, //aligned to 'b' of "bet
clangformat
将结构成员和函数参数名称格式化为列
例如:
struct
{
int alpha; //aligned to 'b' of "beta"
unsigned int beta;
MyObject *gamma; //aligned with 'g' not '*'
};
void foobar (int alpha, //aligned to 'b' of "beta"
unsigned int beta
MyObject *gamma) //aligned with 'g' not '*'
{
}
如果不可能,我可以通过某种方式扩展clang格式来实现这一点吗?好的,您可以接近 对于函数声明: 您可以设置
BinPackParameters=false
,这将强制函数声明的所有参数要么在一行上,要么在另一行上,并且它们将按照您的显示进行对齐
(但不能在类型和标识符之间使用制表位。这在目前的clang格式中是不可能的。)
另外,请参见Declaration onnextline的选项AllowlParameters
允许将函数声明的所有参数放到下一行,即使BinPackParameters为false
对于structs,我认为您无法实现这一点
在过去我自己为clang格式编写了补丁之后,我认为要像您所建议的那样获得一致性需要做很多工作。你必须把一个相当数量的C++自己写入CLAN-LIB格式来支持这个。 <代码> CLAN格式< /Cord>最近(3.7或3.8)获得了更多的调整对齐的选项,我在这个问题中所要求的还没有完全支持,但是我们现在可以稍微靠近一点:
AlignConsecutiveDeclarations: true
它对齐了如上所示的声明
不幸的是,指针星号的格式控制似乎仍然有限,请参见后续文章,我可以得到以下信息:
struct
{
int alpha;
unsigned int beta;
MyObject * gamma;
};
void foobar( int alphaXXXXXXXXXX,
unsigned int betaXXXXXXXXX,
MyObject * gammaXXXXXXXX )
{
}
BinPackArguments
和BinPackParameters
均为false,且aligncontinuenceassignments
和aligncontinuencedcarations
均设置为true(属于这些参数)。我必须将变量的长度扩展到函数中,因为原始变量可以在一行中容纳所有变量。我不确定这是否正确,如果我使用BinPackParameters=false
,那么每个参数都在自己的行中对齐,但只有参数类型与它们的第一个字母对齐,而不是参数名称本身。还是我弄错了?我使用的是clang-format-3.6
顺便说一句。是的,这就是我用括号表示的意思。我不认为你能完全按照你使用的叮当格式得到对齐。好的,我明白了,非常感谢你的回答,特别是最后一段,因为这将是我的下一个问题。我真的很想看到这个功能,但目前我没有足够的时间来编写这样的补丁,尤其是如果它需要大量工作的话。尽管如此,该特性还是非常有用的,因为我正在编写大量代码,其中代码样式指南要求我编写对齐的函数参数和结构成员。在git中使用带有预提交钩子的铿锵格式会非常完美。非常遗憾的是缺少对制表符的支持。您是否能够将MyObject的星号*
定位在空白区域的右侧,就在gamma的g
之前?抱歉@lanoxx不,这是不可能的(目前):可以设置为左/右/中,但与类型和星号之间的空格有关,似乎无法将星号放在变量旁边。在clang格式的较新版本上,我喜欢更进一步,使用“AcrosEmptyLinesAndComments”而不是“true”