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”