VERIFY和ATLVERIFY有什么区别

Mar*_*o M 1 c++ atl

C++宏VERIFY()和ATLVERIFY()之间有什么区别?哪一个更适合用于COM对象?

Iro*_*san 5

报告错误的方式有所不同. ATLVERIFY被定义为

#ifndef ATLVERIFY
#ifdef _DEBUG
#define ATLVERIFY(expr) ATLASSERT(expr)
#else
#define ATLVERIFY(expr) (expr)
#endif // DEBUG
#endif // ATLVERIFY
Run Code Online (Sandbox Code Playgroud)

而且ATLASSERT

#ifndef ATLASSERT
#define ATLASSERT(expr) _ASSERTE(expr)
#endif // ATLASSERT
Run Code Online (Sandbox Code Playgroud)

所以它最终_ASSERTE(参见https://msdn.microsoft.com/en-us/library/ezb1wyez.aspx)

虽然VERIFY

#ifdef _DEBUG
#define VERIFY(f)          ASSERT(f)
#else   // _DEBUG
#define VERIFY(f)          ((void)(f))
#endif // !_DEBUG
Run Code Online (Sandbox Code Playgroud)

所以它最终进入ASSERT(参见https://msdn.microsoft.com/en-us/library/aa297139(v=vs.60).aspx)