zoukankan      html  css  js  c++  java
  • <cassert>

    文件名:

       <cassert> (assert.h) 

      这是一个C语言的诊断库,assert.h文件中定义了一个可作为标准调试工具的宏函数: assert ;

    下面介绍这个宏函数:assert

    函数原型:

    void assert (int expression);

    函数描述:

      如果这个宏函数形式的参数(expression)等于零,也就是说参数的表达式等价于false,那么就会有一条消息会被写入到标准错误设备,并且调用abort()函数来终止程序的运行;

    这条特殊消息的显示依赖于特定库的实现,但是至少包括: 错误参数的陈述,源文件的名称,发生错误的行号;

      通常的表达形式是: Assertion failed: 参数 文件名 行号 ;

      这个宏定义无法使用if,因为在你敲上 #include <assert.h> 的那一刻,一个名为NDEBUG的宏定义就已被声明了,这意味着当调试程序的时候程序员可以按照需要敲许多 assert() 在代码中,并且在发布release版本时只需要简单的在代码的开头处并要在 <assert.h> 之前敲上

        #define NDEBUG

      就可以禁止全部 assert 的作用;

    因此,这个宏定义是被设计来捕捉编程中的错误,而不是用户或运行时错误,因为它通常在程序调试完成后会被禁止.

    函数参数:

       int expression 

        expression可以是一个待计算的表达式,如果表达式的运算结果是0,这将导致断言失败(assertion failure)并终止程序;

    函数返回值:

       void 

    示例:

     1 /* assert example */
     2 #include <stdio.h>      /* printf */
     3 #include <assert.h>     /* assert */
     4 
     5 void print_number(int* myInt) {
     6   assert (myInt!=NULL); 
     7   printf ("%d
    ",*myInt);
     8 }
     9 
    10 int main ()
    11 {
    12   int a=10;
    13   int * b = NULL;
    14   int * c = NULL;
    15 
    16   b=&a;
    17 
    18   print_number (b);
    19   print_number (c);
    20 
    21   return 0;

    在这个栗子中,在程序运行时当 print_number(int *) 函数传入了一个空指针作为实参,assert就会终止它.这发生在第二次调用 print_number(int *) 的时候,这时会引发一个断言失败(assertion failure)来标记(signal)这个BUG;

  • 相关阅读:
    字符串匹配算法之BF算法
    字符串匹配算法之RK算法
    UGUI之修改Text之间的间距
    数据结构和算法基础之快速排序
    数据结构和算法基础之归并排序
    数据结构和算法基础之希尔排序
    数据结构和算法基础之直接插入排序
    数据结构和算法之简单选择排序
    数据结构和算法基础之冒泡排序
    数据结构和算法基础之二叉树的链式储存
  • 原文地址:https://www.cnblogs.com/leihui/p/5062186.html
Copyright © 2011-2022 走看看