assert()函数用法总结(推荐)
发布时间 - 2026-01-10 22:48:11 点击率:次assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:
#include <assert.h> void assert( int expression );
assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单badptr.c:
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
int main( void )
{
FILE *fp;
fp = fopen( "test.txt", "w" );//以可写的方式打开一个文件,如果不存在就创建一个同名文件
assert( fp ); //所以这里不会出错
fclose( fp );
fp = fopen( "noexitfile.txt", "r" );//以只读的方式打开一个文件,如果不存在就打开文件失败
assert( fp ); //所以这里出错
fclose( fp ); //程序永远都执行不到这里来
return 0;
}
[root@localhost error_process]# gcc badptr.c [root@localhost error_process]# ./a.out a.out: badptr.c:14: main: Assertion `fp' failed.
已放弃使用assert()的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。在调试结束后,可以通过在包含#include <assert.h>的语句之前插入 #define NDEBUG 来禁用assert调用,示例代码如下:
#include <stdio.h> #define NDEBUG #include <assert.h>
用法总结与注意事项:
1)在函数开始处检验传入参数的合法性如:
int resetBufferSize(int nNewSize)
{
//功能:改变缓冲区大小,
//参数:nNewSize 缓冲区新长度
//返回值:缓冲区当前长度
//说明:保持原信息内容不变 nNewSize<=0表示清除缓冲区
assert(nNewSize >= 0);
assert(nNewSize <= MAX_BUFFER_SIZE);
...
}
2)每个assert只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败,如:
不好:
assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize);
好:
assert(nOffset >= 0); assert(nOffset+nSize <= m_nInfomationSize);
3)不能使用改变环境的语句,因为assert只在DEBUG个生效,如果这么做,会使用程序在真正运行时遇到问题,如:
错误:
assert(i++ < 100);
这是因为如果出错,比如在执行之前i=100,那么这条语句就不会执行,那么i++这条命令就没有执行。
正确:
assert(i < 100); i++;
4)assert和后面的语句应空一行,以形成逻辑和视觉上的一致感。
5)有的地方,assert不能代替条件过滤。
以上所述是小编给大家介绍的assert()函数用法总结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# assert函数的用法
# assert函数
# JavaScript中的console.assert()函数介绍
# python中assert用法实例分析
# 浅析C语言中assert的用法
# 这条
# 不存在
# 小编
# 多个
# 在此
# 可以通过
# 给大家
# 只在
# 这么做
# 永远都
# 这是因为
# 如在
# 即为
# 所述
# 创建一个
# 给我留言
# 值为
# 感谢大家
# 先向
# 返回值
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
详解vue.js组件化开发实践
如何为不同团队 ID 动态生成多个“认领值班”按钮
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
如何选择可靠的免备案建站服务器?
如何实现建站之星域名转发设置?
怎么用AI帮你设计一套个性化的手机App图标?
浅谈javascript alert和confirm的美化
如何正确选择百度移动适配建站域名?
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
Laravel中的withCount方法怎么高效统计关联模型数量
高端网站建设与定制开发一站式解决方案 中企动力
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
Mybatis 中的insertOrUpdate操作
Laravel如何与Inertia.js和Vue/React构建现代单页应用
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
如何在 Pandas 中基于一列条件计算另一列的分组均值
5种Android数据存储方式汇总
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
如何快速生成橙子建站落地页链接?
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
如何用5美元大硬盘VPS安全高效搭建个人网站?
微信小程序 五星评分(包括半颗星评分)实例代码
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
Laravel distinct去重查询_Laravel Eloquent去重方法
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
EditPlus中的正则表达式实战(6)
微信小程序 HTTPS报错整理常见问题及解决方案
如何快速上传建站程序避免常见错误?
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
如何在VPS电脑上快速搭建网站?
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
动图在线制作网站有哪些,滑动动图图集怎么做?
Android中AutoCompleteTextView自动提示
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
Laravel如何配置和使用缓存?(Redis代码示例)
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
西安专业网站制作公司有哪些,陕西省建行官方网站?
如何在阿里云虚拟主机上快速搭建个人网站?
如何快速上传自定义模板至建站之星?
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复

