可能重複:
Can I redefine a C++ macro then define it back?我可以禁用內部函數中的宏嗎?
我有一個調用從第三方SDK大量的一起應用生命期的功能的應用。這個第三方函數用_3RDPARTY_ASSERT(這是_ASSERT的一個包裝)檢查一些錯誤。
我的問題是,在其中一個調用中,我有時會期待一個錯誤(並在之後處理它)。我想在這種情況下禁用assert,因爲它在調試時很煩人,但在所有其他情況下保留它。
我試圖用pragma push_macro/pop_macro來處理它,但是我還沒找到辦法。 這可能嗎?
我有3rdParty.cpp的來源,但寧願不要觸摸它。
這將是代碼的簡化版本:
mine.cpp:
#include "3rdparty.h"
HRESULT MyMethod(...)
{
HRESULT hr;
hr = _3rdParty(...);
if (SUCCEEDED(hr))
hr = _3rdParty(...);
if (SUCCEEDED(hr))
hr = _3rdParty(...);
...
if (SUCCEEDED(hr))
hr = _3rdParty(...); // This call shouldn't throw the assertion, as I expect it to fail sometimes!
if (FAILED(hr))
doSomething();
else
doSomethingElse();
...
if (SUCCEEDED(hr))
hr = _3rdParty(...);
return hr;
}
3rdParty.cpp:
...
#define _3RDPARTY_ASSERT (_ASSERT)
...
HRESULT _3rdParty(...)
{
HRESULT hr;
hr = SomeFunction();
_3RDPARTY_ASSERT(SUCCEEDED(hr));
return hr;
}
@Jon:這不是重複的。這個問題是關於一般情況,用一個相對簡單的解決方案,這是關於一個沒有明顯解決方案的特定情況。 – raven
你是對的,對不起。 – Jon
已關閉?人們不知道如何閱讀? – raven