网站首页 > 教程分享 正文
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
运行情况:
root@mkx:~/learn/assert1# ./assert1
assert1: assert1.cpp:6: void func1(char*): Assertion `cName != NULL' failed.
已放弃 (核心已转储)
root@mkx:~/learn/assert1#
3 总结
简单地说,出现了不能忍受的错误,我只能崩溃,没有别的选择,我是有脾气的
由此,可知,人有脾气是对的,脾气是对人的种保护,程序也是一样的。
- 上一篇: 信息学竞赛之编程规则(信息学编程比赛)
- 下一篇: 一个有关tcp的非常有意思的问题(tcp的说法)
猜你喜欢
- 2024-10-18 信号 - Linux Signal - 网络编程的相关信号
- 2024-10-18 干货 | 一文搞定 pytest 自动化测试框架(一)
- 2024-10-18 linux网络编程—tcp和udp基本函数调用过程及如何选择
- 2024-10-18 C语言之结构体基础(c语言结构体经典例题)
- 2024-10-18 linux定时器编程详解(包含代码)(linux定时器执行脚本)
- 2024-10-18 C语言学习第16篇---三目运算符和逗号表达式
- 2024-10-18 Linux网络编程相关高级I/O函数 - 用于创建文件描述符的函数
- 2024-10-18 干货 | 一文搞定 pytest 自动化测试框架(二)
- 2024-10-18 现代c++之移动构造,移动赋值,拷贝构造,拷贝赋值
- 2024-10-18 探索C语言断言:保证程序的健壮性和可靠性
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)