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

    “static_cast<void>(0)的意义及NDEBUG assert的使用” 的相关文章

    Go channel实现原理是什么 - 开发技术

    本篇内容主要讲解“Go channel实现原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go channel实现原理是什么”吧!channel单纯地将函数并发执行是没有意义的。函数与函数间需要...

    移动app接口编程技术-学习实现之PHP类其他特性

    Static静态关键字静态。 在类中,被他标记的变量或方法,不属于任何一个对象。访问的时候要使用“::“。并且在类中自我调用的时候要是用”self::” 例如:<?php class Car { private static $speed = 10; public func...

    怎么理解Python中的for循环 - 编程语言

    本文小编为大家详细介绍“怎么理解Python中的for循环”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么理解Python中的for循环”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 01 使用tryexce...

    Ubuntu

    ubuntu14.04 xfce_install_uninstallinstall:sudo apt-get install xfce4then log out,OK!ORsudo apt-get install xubuntu-desktop---------------uninstall:sud...

    什么是 三维渲染内核 的 流渲染模式?有那些功能和优势?

    什么是 三维渲染内核 的 流渲染模式?Streaming流渲染模式是将三维渲染任务放在云服务器上进行,然后将渲染结果以视频流的形式传输到客户端。在这种模式下,客户端负责接收和显示视频流,三维场景的渲染和处理任务不再依赖于客户端设备,而是由云端服务器承担。客户端设备只需要接收云端服务器传输过来的渲染结...

    php如何将json数据转为字符串格式 - 编程语言

    本文小编为大家详细介绍“php如何将json数据转为字符串格式”,内容详细,步骤清晰,细节处理妥当,希望这篇“php如何将json数据转为字符串格式”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 首先,我们需要获...