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

本文详细介绍了断言在C/C++中的使用,包括其作为宏而非函数的特性,如何通过预处理器指令定义NDEBUG来禁用断言,以及断言与正常错误处理的区别。断言主要用于检查逻辑上不可能发生的情况,而错误处理则用于处理运行时可能出现的异常。

总结

  • 断言,是宏,而非函数
  • 忽略断言,在代码开头加上:#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

可以看到输出会把源码文件,行号错误位置,提示出来!

2、断言与正常错误处理

断言主要用于检查逻辑上不可能的情况。例如,它们可用于检查代码在开始运行之前所期望的状态,或者在运行完成后检查状态。与正常的错误处理不同,断言通常在运行时被禁用。

忽略断言,在代码开头加上:

#define NDEBUG          // 加上这行,则 assert 不可用

示例如下:

# define NDEBUG // 忽略断言

#include<assert.h>

int main(){
    int x=7;
    assert(x==5);
    return 0;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReCclay

如果觉得不错,不妨请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值