开关的情况下缩进
我一直在做大量的代码读取的最后几个星期,我开始想我被编码了switch语句(像语言的所有C)错。我在野外看到的大多数例子中,开关和案例关键字是排队的。我总是缩进那些对我更清洁的案例。缺点是,如果你有条件的情况下,大括号最终从外部开关看两个缩进级别;所以也许不缩进这个案子是正确的。要好奇看看其他人对这个风格问题的看法。开关的情况下缩进
这里是我如何在做它(如果我的问题需要更多的视觉)的例子:
switch(keyCode) {
case TVKEY.KEY_EXIT:
// do something
case TVKEY.KEY_ENTER:
if(firstTest)) { // User chose to steal token
// do something
} else if(secondTest)) {
// other condition
} else {
// do else
}
break;
default:
// do default stuff
break;
}
通知最后contional的支架是在截止开关支架两个层次。不正确的?太挑剔了?
所以基本上你争论
和 之间switch(x) {
case 1: if (something) {
}
case 2: if (other) {
}
}
switch (x) {
case 1: if (something) {
}
case 2: if (other) {
}
}
我个人更喜欢第一个,即使它过度的缩进。至少它使交换机的内容更加突出。
ETA:
好了,你已经添加了一个样本。我仍然认为过度缩进是可取的,因为哪里属于哪里的视觉清晰。
当然,压痕能/会引起圣战:选项卡/空间?标签停在4个字符? 8个字符?叉子?勺?
我的选择是在同一列作为switch
的case
开始。
我的理由有两个方面:
代码缩进也不为过。
它反映了
if
,else if
,else
条款的结构。可能每个人都会认为if
和else
应该对齐,因为它们是单个条件构造的逻辑控制代码的一部分。switch
和case
也显然是单个条件构造的逻辑控制代码的一部分,并且一致性应该如此对齐。毕竟一个switch-case
构造可以被重写为if-else
构造,并且在编译时都会给出相同的低级代码。
我的2美分,因为我只是面临的问题,并发现我喜欢够共享解决方案=)
switch (mode)
{
case Value1:
{
Ptr_t ptr1 = ...;
return ptr1;
}
case Value2:
{
Ptr_t ptr2 = ...;
return ptr2;
}
default:
{
return nullptr;
}
}
解释:
有时候,你不得不将这些情况下的范围限定在授权范围内,以便在其中声明局部变量。 (在
case
之后声明一个变量是错误的,因为关键字本身没有定义范围。那么这不是问题)。我选择范围内的东西,无论案件内容如何,一切都始终如一。可读性!我发现这里真的很清楚,所以这是一个非常好的观点。有一些不必要的缩进,但是当它提高可读性时谁在乎?
case
和default
赞美队列看起来像其他控制结构,所以这对新读者来说并不奇怪。
这不是一个实际的/确定性的答案,只是个人的选择。
我们找到了最适合我们的解决方案。通过单个空间(适用于制表符或空格缩进首选项)缩进大小写关键字(也是此事的默认设置,实际上这适用于公共,受保护和私有)。这似乎给了两全其美。
我发现迄今唯一的缺点:似乎没有汽车美化工具被发现这样做。
这是如何从问题的代码会看起来像
switch (keyCode) {
case TVKEY.KEY_EXIT: // indented by one space against switch
// do something
case TVKEY.KEY_ENTER:
if (firstTest) { // indented by one tab sizes against switch
// do something
} else if (secondTest) {
// other condition
} else {
// do else
}
break; // empty line visualize block, so you know code is not passing to next case
default:
// do default stuff
break;
}
请举例说明,仅用文字描述就不太清楚 – Wndrr 2017-10-22 11:54:42
的可能的复制[为什么不人缩进C++的访问说明/ case语句?](http://stackoverflow.com/questions/4299729/ why-dont-people-indent-c-access-specifiers-case-statements) – Antonio 2016-06-09 15:02:03