2011-01-06 38 views
3

我們在檢查函數返回狀態的代碼中經常出現重複行,並且它是否立即返回狀態爲失敗。我想定義這個宏:這個宏是否存在問題 - 檢查狀態並在失敗時返回

#define RETURN_IF_FAILED(x) { int stat = (x); if (FAILED(stat)) return stat; } 

局部變量是因爲參數x可能是一個函數調用。

據我所知,有一些使用宏的奇怪的工件,我不是很熟練,我想問你是否看到這個宏的任何問題。謝謝。

(和請,不建議使用的例外 - 我討厭這種風格我自己,但是這就是它在這裏所做的那樣)

回答

7

我想稍作修改;與do{} while(0)這樣的封閉它:

#define RETURN_IF_FAILED(x) do { int stat = (x); if (FAILED(stat)) return stat; } while(0) 

現在你可以使用這個宏,就像這樣:

if (SomeCondition) 
    RETURN_IF_FAILED(x); //<--- note the "usual" semicolon! 
else 
{ 
    //some code 
} 

有了您的版本,這個代碼是不可能的。宏後的;會在您的版本中造成問題!

+0

謝謝,這是因爲`;`,對吧?我讀過關於這個技巧...... – davka 2011-01-06 13:16:37

相關問題