static_cast<void>(0)的意义及NDEBUG assert的使用
阿里云国际版折扣https://www.yundadi.com |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
查看ace代码时发现如下代码
#define ACE_TEST_ASSERT(X) \
((X) \
? static_cast<void>() \
: ACE_VERSIONED_NAMESPACE_NAME::__ace_assert(__FILE__, __LINE__, ACE_TEXT_CHAR_TO_TCHAR (#X))) #if defined (ACE_NDEBUG)
#define ACE_ASSERT(x) \
(static_cast<void>())
#else
#define ACE_ASSERT(X) ACE_TEST_ASSERT(X)
#endif /* ACE_NDEBUG */
使用NDEBUG可以使assert失效,这在c中同样成立。
而static_cast<void>(0)的作用为避免编译器弹出warning提醒,这是因为如果这里直接写0的话,则当编译时,由于该处没有执行代码,编译器会弹出:"Warning: expression 0;
has no effect."的提示。因此static_cast<void>(0)告知编译器这里进行了格式转换,避免弹出提示。
static_cast<void>(0)是c++中的写法,在c中则为assert.h
#ifdef NDEBUG #define assert(expression) ((void)0) #else _ACRTIMP void __cdecl _wassert(
_In_z_ wchar_t const* _Message,
_In_z_ wchar_t const* _File,
_In_ unsigned _Line
); #define assert(expression) (void)( \
(!!(expression)) || \
(_wassert(_CRT_WIDE(#expression), _CRT_WIDE(__FILE__), (unsigned)(__LINE__)), ) \
) #endif
阿里云国际版折扣https://www.yundadi.com |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |