【C++快速上手】十一、assert学习笔记

举报
ReCclay 发表于 2022/02/21 23:47:53 2022/02/21
【摘要】 总结 断言,是宏,而非函数忽略断言,在代码开头加上:#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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。