• [原]C断言/静态断言


    关于断言,可以作为一种很强大的调试方式或者程序运行时的错误诊断

    但是断言也不是适合于各种地方,服务器软件和嵌入式程序一般不适用,断言会强制中断正在运行的程序,对于服务器等程序来说,

    将会是一个灾难。加上,断言会加剧CPU 的负载,其中会调用一些函数。

    作为调试时使用断言是个不错的选择

    一般断言:

    #ifndef NDEBUG

              assert( conditon ) ;

    #endif

    这样,你的断言会在没有定义NDEBUG 的时候检测是否assert(..)中的表达式为真,如果不为真,将终止程序

    但是,作为一种调试方式,assert()一般不用于判断用户的输入,而是断言程序在某个时刻的状态一定为真,当然,终止程序的方法有点粗鲁,但是比起让错误的程序继续执行更加有效

    下面是静态断言

    为什么使用静态断言?

    静态断言可以在编译时就对程序的错误做出判断,而普通断言只能在程序运行出现错误的时候做出退出并产生调试信息

    static_assert(condition,string_condition);

    第一次参数是表达式,第二个参数是输出的信息

    static_assert()是C++ 新增的内容

    在C语言里可以这样实现:

    #define JOIN( X , Y ) JOIN_AGIN( X, Y )
    
    #define JOIN_AGIN(X,Y) X##Y
    
    typedef static_assert(e)\
    
              typedef char JOIN(assert_failed_at_line,__LINE___) [(e)?1:-1]
    

      

    文章属原创,转载请注明出处 联系作者: Email:zhangbolinux@sina.com QQ:513364476
  • 相关阅读:
    LintCode "Binary Tree Serialization"
    LeetCode "Find the Duplicate Number"
    LintCode "Route Between Two Nodes in Graph"
    LintCode "Search a 2D Matrix II"
    LintCode "Submatrix Sum"
    LintCode "Sort Letters by Case"
    LeetCode "Peeking Iterator"
    LintCode "Sort Colors II"
    LeetCode "Move Zeroes"
    LintCode "Update Bits"
  • 原文地址:https://www.cnblogs.com/Bozh/p/2454254.html
Copyright © 2020-2023  润新知