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的使用” 的相关文章

    Maven打包时怎么指定启动类 - 开发技术

    这篇“Maven打包时怎么指定启动类”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Maven打包时怎么指定启动类”文章吧。Maven打包时指定启动类使用...

    XXE漏洞中DOCTYPE、ENTITY傻傻分不清-WEB安全基础入门—XML外部实体注入(XXE)

    欢迎关注订阅专栏! WEB安全系列包括如下三个专栏: 《WEB安全基础-服务器端漏洞》 《WEB安全基础-客户端漏洞》 《WEB安全高级-综合利用》 知识点全面细致,逻辑清晰、结合实战,并配有大量练习靶场,让你读一篇、练一篇,掌握一篇,在学习路上事半功倍,少走弯路! 欢迎关注订阅专栏!...

    PHP超出整型数据相加问题怎么解决 - 编程语言

    这篇“PHP超出整型数据相加问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP超出整型数据相加问题怎么解决”文章吧。...

    C++随机数

    由于qrand()得到的是固定的伪随机数,而time得到的如果在时间小于一秒则相差不大,要想每次运行程序生成的不一样,我的做法是把这两种相加,这样下次运行得到的多个随机数就和上次不一样了. //random rect QRectF randRect; l...

    java Shiro相关知识点有哪些 - 开发技术

    这篇文章主要介绍了java Shiro相关知识点有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java Shiro相关知识点有哪些文章都会有所收获,下面我们一起来看看吧。1.权限的管理1.1 什么是权限管理基本上涉及到用户参与的系统...

    技术博客1鸿蒙系统和安卓的区别有哪些

    鸿蒙系统和安卓的区别介绍        1.内核不同   华为鸿蒙系统与安卓在系统架构上有着本质的区别其中安卓是基于宏内核而鸿蒙则是基于微内核开发的。   它将许多内容整合到宏内核的体系结构中使系统在运行时内核与各个进程之间保持着非常紧密的联系。尽管该体系结构下系统运行更高效但存在严重缺陷。开...