我有一個宏,檢查錯誤狀態。如果有錯誤,它會記錄結果並返回方法。VC C++宏執行/評估每次在宏中使用宏參數
CHECKHR_FAILED_RETURN(hr) if(FAILED(hr)){LOGHR_ERROR(hr); return hr;}
宏被稱爲像這樣:
CHECKHR_FAILED_RETURN(_recordingGraph->StopRecording(¤tFile));
然而,如果結果確實FAILED(hr)
,再次執行方法來執行LOGHR_ERROR(hr)
。我明白了爲什麼我的StopRecording在出現錯誤的情況下被調用兩次,所以我的問題是...
如何評估宏中參數的結果,但在同一個宏中多次使用它?
UPDATE:基於以下建議
,我改變了我的宏以下。
#define CHECKHR_FAILED_RETURN(hr) do { \
HRESULT result = hr; \
if(FAILED(result)) \
{ \
LOGHR_ERROR(result); \
return result; \
} \
} while (false);
#define CHECKHR_FAILED(hr) do { \
HRESULT result = hr; \
if(FAILED(result)) \
{ \
LOGHR_ERROR(result); \
return true; \
} \
else \
{ \
return false; \
} \
} while (false);
東西是一些東西,宏是邪惡的,做一個功能,別的東西(更嚴重的說明,我不知道這很容易實現,如果有的話) – Borgleader 2014-11-06 16:49:41
你可以發佈代碼,我們有些人無法查看圖像。 – Barry 2014-11-06 16:59:12
這看起來像你試圖用宏來檢查錯誤。你可以考慮一個'try'-'catch'塊。 – 2014-11-06 17:10:19