查看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
												

最新文章

  1. cookie封装
  2. 了解JavaWeb,一篇就够
  3. 繁华模拟赛 Vicent与游戏
  4. 集合删数 (vijos 1545) 题解
  5. poj -1065 Wooden Sticks (贪心or dp)
  6. UVa 1467 (贪心+暴力) Installations
  7. poj1458 dp入门
  8. Linux的cron和crontab
  9. 在外围获取APP的机密信息
  10. Idea 15 激活
  11. Linker Scripts3--简单的链接脚本命令1
  12. vue-cli@3.x之使用vue ui创建项目-来自一个战五渣的体验
  13. ZigBee相关网站链接
  14. DataStream_操作基本类型数据的流对象
  15. Pycharm小技巧
  16. hdu-6435
  17. 使用VS2013 + EF6 连接Mysql数据库
  18. 常用的7个SQl优化技巧
  19. Verilog 加法器和减法器(4)
  20. Hadoop生态圈-使用MapReduce处理HBase数据

热门文章

  1. Pandas删除数据的几种情况
  2. 访问修饰符(C# 编程指南)
  3. [转]Apache 配置虚拟主机三种方式
  4. scala编程第15章
  5. 基于libnids的TCP数据流的还原(多线程实现) .
  6. android 系统层 常用类介绍
  7. Python3爬虫:利用Fidder抓取手机APP的数据
  8. spark0.8.0安装与学习
  9. linux命令学习——ps
  10. svn commit --cl app 时手动输入提交的注释,而不是在 -m &#39;comments here&#39;这里输入