2011-03-10 89 views
15

我一直在做大量的代码读取的最后几个星期,我开始想我被编码了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的支架是在截止开关支架两个层次。不正确的?太挑剔了?

+0

的可能的复制[为什么不人缩进C++的访问说明/ case语句?](http://stackoverflow.com/questions/4299729/ why-dont-people-indent-c-access-specifiers-case-statements) – Antonio 2016-06-09 15:02:03

回答

12

所以基本上你争论

之间
switch(x) { 
    case 1: if (something) { 
      } 
    case 2: if (other) { 
      } 
} 

switch (x) { 
case 1: if (something) { 
     } 
case 2: if (other) { 
     } 
} 

我个人更喜欢第一个,即使它过度的缩进。至少它使交换机的内容更加突出。

ETA:

好了,你已经添加了一个样本。我仍然认为过度缩进是可取的,因为哪里属于哪里的视觉清晰。

当然,压痕能/会引起圣战:选项卡/空间?标签停在4个字符? 8个字符?叉子?勺?

+1

Boo!嘶!! :-) – Ben 2011-03-10 18:02:12

+16

我必须说我不关心如果在同一行开始如果真的使缩进在两种情况下都是奇怪的IMO – Rob 2011-03-10 19:11:39

+0

如果开关在枚举上并且常量甚至是中等的('ABC_MAIN_ALTERNATIVE'),那么你最终会得到巨大的缩进。当事情只是单个数字时,这并不算太坏,但现实世界并不全是关于单个数字。 – 2018-03-10 05:49:06

7

我的选择是在同一列作为switchcase开始。

我的理由有两个方面:

  1. 代码缩进也不为过。

  2. 它反映了if,else if,else条款的结构。可能每个人都会认为ifelse应该对齐,因为它们是单个条件构造的逻辑控制代码的一部分。 switchcase也显然是单个条件构造的逻辑控制代码的一部分,并且一致性应该如此对齐。毕竟一个switch-case构造可以被重写为if-else构造,并且在编译时都会给出相同的低级代码。

6

我的2美分,因为我只是面临的问题,并发现我喜欢够共享解决方案=)

switch (mode) 
{ 
    case Value1: 
    { 
     Ptr_t ptr1 = ...; 
     return ptr1; 
    } 

    case Value2: 
    { 
     Ptr_t ptr2 = ...; 
     return ptr2; 
    } 

    default: 
    { 
     return nullptr; 
    } 
} 

解释:

  1. 有时候,你不得不将这些情况下的范围限定在授权范围内,以便在其中声明局部变量。 (在case之后声明一个变量是错误的,因为关键字本身没有定义范围。那么这不是问题)。我选择范围内的东西,无论案件内容如何,​​一切都始终如一。

  2. 可读性!我发现这里真的很清楚,所以这是一个非常好的观点。有一些不必要的缩进,但是当它提高可读性时谁在乎?

  3. casedefault赞美队列看起来像其他控制结构,所以这对新读者来说并不奇怪。

这不是一个实际的/确定性的答案,只是个人的选择。

1

我们找到了最适合我们的解决方案。通过单个空间(适用于制表符或空格缩进首选项)缩进大小写关键字(也是此事的默认设置,实际上这适用于公共,受保护和私有)。这似乎给了两全其美。

我发现迄今唯一的缺点:似乎没有汽车美化工具被发现这样做。

这是如何从问题的代码会看起来像

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; 

} 
+0

请举例说明,仅用文字描述就不太清楚 – Wndrr 2017-10-22 11:54:42