• C++断言让程序有了脾气


    1、背景

    断言用的少,可能没有遇上严重的问题吧
    按照其含义,其是非常必要的,比如为空的判断;它让程序有了脾气,不行,直接就不干了,其实只有这样,才保证了,程序不犯错误,如果出现了错误,程序还运行,就会出现更大的错误,这时,程序直接选择发脾气,不干了,是最佳的选择,这就是断言的意义所在

    1.1 具体用法如下:

    assert,中文翻译为断言,注意是一个宏定义,不是函数。
    c++中,要使用assert,可以将cassert头文件include进来,而cassert最终是引用的assert.h。
    assert的作用跟其他语言中是一样的,如果它里面的条件返回错误,代码会终止运行,并且会把源文件,错误的代码,以及行号,都输出来。

    1.2 使用时的注意事项

    在编程当中,其作用就是使用断言预防不可能的事情,这就是断言的意义所在。
    无论何时,你发现自己在想“当然这是不可能发生的”时,添加代码来检查这一点。
    不要使用断言来代替真正的处理处理。断言检查的是不可能发生的事情,比如参数不能为NULL,或者可以理解为,这是必须这样。

    assert是用来避免显而易见的错误的,而不是处理异常的。错误和异常是不一样的,错误是不应该出现的,异常是不可避免的。c语言异常可以通过条件判断来处理,其它语言有各自的异常处理机制

    一个非常简单的使用assert的规律就是,在方法或者函数的最开始使用,如果在方法的中间使用则需要慎重考虑是否是应该的。方法的最开始还没开始一个功能过程,在一个功能过程执行中出现的问题几乎都是异常。
    错误就是出现后,程序不能继续运行了,继续运行会出现更大的问题,必须终止程序
    异常,就是,可能处理的错误,程序可以继续运行

    2 实例

     1 #include <cstdio>
      2 #include <cassert>
      3 #include <string.h>
      4 
      5 void func1(char *cName) {
      6    assert(cName != NULL);
      7    strcpy(cName,"liming");
      8 }  
      9 
     10 int main(int argc, char const *argv[])
     11 {
     12     char *cName = NULL;
     13     func1(cName);
     14     printf("cName=%s", cName);
     15     
     16     return 0;
     17 }   
     18 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    运行情况:

    root@mkx:~/learn/assert1# ./assert1 
    assert1: assert1.cpp:6: void func1(char*): Assertion `cName != NULL' failed.
    已放弃 (核心已转储)
    root@mkx:~/learn/assert1# 
    
    • 1
    • 2
    • 3
    • 4

    3 总结

    image.png

    简单的说,出现了不能忍受的错误,我只能崩溃,没有别的选择,我是有脾气的
    由此,可知,人有脾气是对的,脾气是对人的种保护,程序也是一样的。

  • 相关阅读:
    8–9月,​Sui Move智能合约工作坊将在台北+线上举行
    宽字节注入
    Go 企业级框架 Gin 版全新发布
    【Unity】导航基本组件:Nav Mesh Agent、Off Mesh Link、Nav Mesh Obstacle
    01_Maven
    驱动开发:内核枚举IoTimer定时器
    Go中的编程模式:Pipeline
    大学生餐饮主题网页制作 美食网页设计模板 学生静态网页作业成品 dreamweaver美食甜品蛋糕HTML网站制作
    最新版Jenkins(jdk11)-----JAVA项目使用低版本jdk编译的解决办法
    大企业与小企业在信息安全体系建设中的区别
  • 原文地址:https://blog.csdn.net/maokexu123/article/details/126549023