可能重复:
我可以重新定义一个 C++ 宏然后再定义它吗?
我有一个应用程序在应用程序生命周期中多次调用来自第三方 SDK 的函数。此第三方函数使用其 _3RDPARTY_ASSERT(它是 _ASSERT 的包装器)检查某些错误。
我的问题是,在其中一个调用中,我有时会期待一个错误(然后处理它)。在这种情况下,我想禁用断言,因为它在调试时很烦人,但在所有其他情况下都保留它。
我试图用 pragma push_macro/pop_macro 来处理它,但我还没有找到办法。这可能吗?
我有 3rdParty.cpp 的来源,但不想碰它。
这将是代码的简化版本:
我的.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;
}