clang-format:将指针声明的星号 (*) 与变量名对齐
Posted
技术标签:
【中文标题】clang-format:将指针声明的星号 (*) 与变量名对齐【英文标题】:clang-format: Align asterisk (*) of pointer declaration with variable name 【发布时间】:2016-11-18 11:22:22 【问题描述】:我在 .clang-format
文件中使用以下选项:
AlignConsecutiveDeclarations: true
PointerAlignment: Right
当前格式化结果如下:
char * var1;
SomeOtherType *var2;
int var3;
我期待的结果是:
char *var1; //note the changed position of *
SomeOtherType *var2;
int var3;
我如何配置 clang-format
以将星号 (*) 与变量名对齐,而不是与类型对齐
使用AlignConsecutiveDeclarations
选项?
【问题讨论】:
【参考方案1】:很遗憾,PointerAlignment: Right
尚未实现。
见https://github.com/llvm/llvm-project/blob/master/clang/lib/Format/WhitespaceManager.cpp#L643
void WhitespaceManager::alignConsecutiveDeclarations()
if (!Style.AlignConsecutiveDeclarations)
return;
// FIXME: Currently we don't handle properly the PointerAlignment: Right
// The * and & are not aligned and are left dangling. Something has to be done
// about it, but it raises the question of alignment of code like:
// const char* const* v1;
// float const* v2;
// SomeVeryLongType const& v3;
AlignTokens(Style, [](Change const &C) return C.IsStartOfDeclName; ,
Changes);
【讨论】:
这仍然适用。想知道它是否会被修复? 我想知道reviews.llvm.org/D27651 发生了什么,它早在 2016 年就实现了右对齐。 仍然没有以clang-format 13.0.0实现【参考方案2】:现在解决了!
评论https://reviews.llvm.org/D27651已在https://reviews.llvm.org/D103245重新申请并在https://reviews.llvm.org/rG3e333cc82e42e1e2ecc974d896489eebe1a5edc2提交。
此更改将包含在 LLVM 13 版本中。
【讨论】:
嗨 Marek,它对我不起作用。我正在使用 clang 格式 13.0.0。我使用“PointerAlignment:Right”,但星号仍向左对齐 - 与类型名称对齐。 Alexey,那你应该报告一个错误。 github.com/llvm/llvm-project/labels/clang-format以上是关于clang-format:将指针声明的星号 (*) 与变量名对齐的主要内容,如果未能解决你的问题,请参考以下文章