• 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> 之前

  • 相关阅读:
    多线程创建方式及线程安全问题
    JDBC连接池&DBUtils
    mySQL 多表查询语句
    git 本机链接多库配置
    mysql类似递归的一种操作进行层级查询
    js 自定义事件观察者模式(发布/订阅)
    CSS样式遇见的问题总结记录
    maven打包pom.xml备忘
    JasperReports实现报表调出excel
    ActiveMQ 集群配置 高可用
  • 原文地址:https://www.cnblogs.com/loveyouyou616/p/5736849.html
Copyright © 2020-2023  润新知