2010-10-03 40 views
0

我不是很熟悉機器代碼,但我認爲這是一個非常簡單的問題。
如果我想要做的錯誤處理通過一個整數函數返回(而不是函數拋出異常),是更好的做法,從機器代碼的角度來看,以:如果錯誤,然後切換與開關「好」的情況下

  1. 檢查整數對於「壞」值的條件語句,然後使用switch語句來處理「壞」值,或者切換整數,併爲「好」值(s)提供一個例子「壞」 的值(或多個)

例如,在C++:

enum error_code {E_GOOD, E_BAD, E_UGLY}; 
error_code func_b(); 

選項1

void func_a() 
{ 
    error_code err_catch = func_b(); 

    if (err_catch) 
    { 
     switch (err_catch) 
     { 
     case E_BAD: 
      /* Handle bad case */ 
      break; 
     case E_UGLY: 
      /* Handle ugly case */ 
      break; 
     } 
    } 
} 

選項2

void func_a() 
{ 
    error_code err_catch = func_b(); 

    switch (err_catch) 
    { 
    case E_GOOD: 
     break; 
    case E_BAD: 
     /* Handle bad case */ 
     break; 
    case E_UGLY: 
     /* Handle ugly case */ 
     break; 
    } 
} 

謝謝您的幫助。

回答

1

第一個測試也許應該是:

if (err_catch != E_GOOD) 

這是明確的關於「發生了錯誤」。順便說一句,你的代碼看起來像是通過一個C++編譯器。 C不會創建類型error_code與前面的enum;你將不得不補充:

typedef enum error_code error_code; 

就生成的代碼而言,兩者之間幾乎沒有什麼區別。

我可能會使用選項1(if表示法)只是爲了清楚地說明該開關只處理錯誤情況(因爲它只需處理錯誤情況),但我不反對如果它被提交給我進行代碼審查。

+0

啊,是的,忘了C不會自動執行'typedef'。對C++的小改動。 – cordella 2010-10-03 15:19:12

1

enum類型,我會直接使用switch語句,以便編譯器可以確保switch語句真正處理所有可能的值。

+0

現在你已經提到了,我確實記得編譯器抱怨沒有在一個檢查它的'switch'中使用'enum'值,奇怪的是它是'E_GOOD'值。這是在'catch'塊中,所以我沒有理由提供'E_GOOD'的情況,但編譯器仍然警告它。 – cordella 2010-10-03 16:42:20