2011-03-10 88 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