C/C++中的断言(assert与static_assert)

本文详细介绍了C/C++中的断言机制,包括assert的基本使用、何时使用assert、static_assert的介绍及其与assert的区别,并探讨了如何在C语言中使用static_assert以及如何让assert打印错误提示。
摘要由CSDN通过智能技术生成

你也可以通过我的独立博客 —— www.huliujia.com 获取本篇文章

assert简介

assert被C/C++用来判断某些条件是否成立,比如判断指针类型的大小sizeof(void*)是否大于8,或者判断malloc返回的指针是否为null。

assert的函数申明如下:

void assert( int expression );

如果expression为0,即false,assert就会把函数名,源代码文件名、当前行号发送给标准错误stderr,然后调用abort()终止执行。

什么时候使用assert

assert一般用于判断逻辑上一定为真的条件,如果条件不符合就会导致未定义行为(undefined behavior)时,就可以使用assert。

这里其实涉及到狭义约定(narrow contract)和广义约定(wide contract)的概念。所谓狭义约定,就是函数执行需要满足预定义的条件,如果不满足就会导致未定义行为,比如std::vector::operator[],如果传入的index等于或者超过vector的大小,就会导致undefined behavior。而使用广义约定的函数即使输入不符合预期,也不会出现未定义行为。比如std::vector::at(),如果输入的index超出范围࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值