C 如何使用叮当格式保持标签缩进?
叮当格式删除C 如何使用叮当格式保持标签缩进?,c,clang-format,C,Clang Format,叮当格式删除goto标签上的缩进。不建议使用//clangformat off。如何配置clang格式以不更改配置文件中标签的缩进 所需输出 标签缩进以匹配函数中的代码。他们应该留在那个缩进里 int new_foo(foo **bar) { *bar = malloc(sizeof(foo)); if ( !bar ) { goto failed; } goto done; failed: { return -1; } done: retur
goto
标签上的缩进。不建议使用//clangformat off
。如何配置clang格式以不更改配置文件中标签的缩进
所需输出
标签缩进以匹配函数中的代码。他们应该留在那个缩进里
int new_foo(foo **bar) {
*bar = malloc(sizeof(foo));
if ( !bar ) {
goto failed;
}
goto done;
failed: {
return -1;
}
done:
return 1;
}
实际产出
这就是clang格式实际产生的结果。这是不可取的,因为它会破坏压痕折叠
int new_foo(foo **bar) {
*bar = malloc(sizeof(foo));
if ( !bar ) {
goto failed;
}
goto done;
failed: {
return -1;
}
done:
return 1;
}
更新
在.clang格式
配置中使用IndentGotoLabels:false
(或true
)时,这就是结果。注意完成:
和失败:
标签向左移动
int new_foo(foo **bar) {
*bar = malloc(sizeof(foo));
if (!bar) {
goto failed;
}
goto done;
failed : { return -1; }
done:
return 1;
}
.clang格式的内容
IndentGotoLabels: false
命令为
cat test.cc | clang format
,并在存在.clang format
的同一目录中运行。编辑:我最初的答案是错误的
看起来,无论如何设置缩进标签,标签都不会缩进到与代码相同的级别。考虑下面的代码片段:
int new_foo()
{
{
int*p=malloc(sizeof(int));
如果(!p)
goto first_标签;
int*q=malloc(sizeof(int));
if(!q)
转到第二个标签;
返回0;
第一个标签:
返回1;
}
第二个标签:
返回2;
}
使用以下配置:
---
Language: Cpp
IndentGotoLabels: false
TabWidth: 4
...
运行clangformat
将为我们提供:
int new_foo(){
{
int*p=malloc(sizeof(int));
如果(!p)
goto first_标签;
int*q=malloc(sizeof(int));
if(!q)
转到第二个标签;
返回0;
第一个标签:
返回1;
}
第二个标签:
返回2;
}
如果我们将IndentGotoLabels
更改为true
我们有:
int new_foo(){
{
int*p=malloc(sizeof(int));
如果(!p)
goto first_标签;
int*q=malloc(sizeof(int));
if(!q)
转到第二个标签;
返回0;
第一个标签:
返回1;
}
第二个标签:
返回2;
}
标签现在缩进,但与启动代码块的{
处于同一级别,而不是代码本身
我不知道这是否是clangformat
无法做到的,或者我缺少了一些选项。即使我的答案实际上没有解决问题,我也会将其公布。它可能会被证明是有用的
这也是文档中的行为,如果我们查看文档中的示例,那么可能没有办法更改它
这属于意见范围,但是铿锵格式
有时会受到很大的限制。如果您可以自由使用另一个代码格式化程序,则可以使用--缩进标签
初始答案:
在.clang格式文件中将IndentGotoLabels
设置为false。有关详细信息,请参阅
如果没有.clang格式的文件,可以根据预定义的样式生成一个文件:
clang-format -style=llvm -dump-config > .clang-format
我问这个问题是因为我在文档中找不到答案。你不需要光顾。这似乎不起作用。你能给出一个更详细的例子吗?示例代码和配置?我认为它不能取消缩进已经缩进的标签(我现在无法检查)。我用IndentGotoLabels
不起作用的方式更新了原始问题。我是btw版本10。对不起,我完全误解了这个问题。我编辑了我的答案,但看起来clangformat
仍然不能满足您的需要(或者我找不到正确的选项).在回顾了clang format的源代码之后,我认为这是最好的答案。感谢您的astyle
建议。