我有一个宏,检查错误状态。如果有错误,它会记录结果并返回方法。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