【C++快速上手】十一、assert学习笔记
【摘要】
总结
断言,是宏,而非函数忽略断言,在代码开头加上:#define NDEBUG
1、第一个断言案例
断言,是宏,而非函数。assert 宏的原型定义在 (C)、(C++)中,其作用是如果它的条...
总结
- 断言,是宏,而非函数
- 忽略断言,在代码开头加上:
#define NDEBUG
1、第一个断言案例
断言,是宏,而非函数。assert 宏的原型定义在 (C)、(C++)中,其作用是如果它的条件返回错误,则终止程序执行。可以通过定义 NDEBUG 来关闭 assert,但是需要在源代码的开头,include 之前。
#include <stdio.h>
#include <assert.h>
int main()
{
int x = 7;
/* 中间的一些大代码假设x意外地变成了9 */
x = 9;
// 程序员假设x在其余代码中为7
assert(x==7);
/* 其余代码 */
return 0;
}
//输出
Assertion failed!
Program: E:\CLionProjects\HelloWorld\cmake-build-debug\HelloWorld.exe
File: E:\CLionProjects\HelloWorld\main.cpp, Line 14
Expression: x==7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
可以看到输出会把源码文件,行号错误位置,提示出来!
2、断言与正常错误处理
断言主要用于检查逻辑上不可能的情况。例如,它们可用于检查代码在开始运行之前所期望的状态,或者在运行完成后检查状态。与正常的错误处理不同,断言通常在运行时被禁用。
忽略断言,在代码开头加上:
#define NDEBUG // 加上这行,则 assert 不可用
- 1
示例如下:
# define NDEBUG // 忽略断言
#include<assert.h>
int main(){
int x=7;
assert(x==5);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
文章来源: recclay.blog.csdn.net,作者:ReCclay,版权归原作者所有,如需转载,请联系作者。
原文链接:recclay.blog.csdn.net/article/details/108060282
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)