c语言静态断言

  在php中可以通过xdebug来显示详细的错误信息,可以细化到哪个文件哪行代码引起的报错。在C语言里面也可以通过静态断言(assert)来使得调试代码更加方便。关于断言,可以作为一种很强大的调试方式或者程序运行时的错误诊断,但是断言也不是适合于各种地方,服务器软件和嵌入式程序一般不适用,断言会强制中断正在运行的程序,对于服务器等程序来说,将会是一个灾难。加上,断言会加剧CPU 的负载,其中会调用一些函数。

  先看下面代码

void main()
{
    //动态分配1字节内存
    char *p = (char *)malloc(sizeof(char));
    *p = 'h';

}

  上面代码就是给指针变量p 动态分配1字节内存 ,然后把字符h赋值给指针变量p。但是会有一个问题,假如内存分配失败 ,则 *p = 'h' 会出错(空指针无法赋值)

  可以加上静态断言来解决此问题

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<assert.h>
 4 
 5 //assert 一般用于错误调试等功能
 6 void main()
 7 {
 8     //动态分配1字节内存
 9     char *p = (char *)malloc(sizeof(char));//malloc分配内存失败的时候返回null
10     assert(p!=NULL); //当p!=NULL成立是正常,否则会报出详细的错误信息
11     *p = 'h';
12 
13     printf("%c",*p);
14 }

  

  如果我们想关闭静态断言的效果,可以直接使用一个开关来处理 

1 #define NDEBUG //关闭静态断言的开关
2 
3 #include<stdio.h>
4 #include<stdlib.h>
5 #include<assert.h>

  注意:此开关需在定义在  #include<assert.h> 之前

原文地址:https://www.cnblogs.com/loveyouyou616/p/5736849.html