电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

linux系統(tǒng)下如何使用assert函數(shù)?

瀏覽:99日期:2023-07-12 14:46:24

只要看得懂程序的人都知道assert,在Windows下使用VC編寫,使用assert之后,只需在IDE中設(shè)置為debug版或者是release版,編譯器就會自動忽略掉assert。但是在Linux下,必須要在編譯命令中加入-DNDEBUG中,系統(tǒng)編譯時才不會將assert編譯進去。不然,程序運行時有可能會被assert中斷。那linux系統(tǒng)下如何使用assert函數(shù)呢?下面就和大家說一下linux系統(tǒng)下使用assert函數(shù)的方法。

linux系統(tǒng)下如何使用assert函數(shù)?

步驟如下:

assert宏的原型定義在《assert.h》中,其作用是如果它的條件返回錯誤,則終止程序執(zhí)行,原型定義:

#include 《assert.h》

void assert( int expression );

assert的作用是現(xiàn)計算表達式 expression ,如果其值為假(即為0),那么它先向stderr打印一條出錯信息,

然后通過調(diào)用 abort 來終止程序運行。

請看下面的程序清單badptr.c:

#include 《stdio.h》

#include 《assert.h》

#include 《stdlib.h》

int main( void )

{

FILE *fp;

fp = fopen( “test.txt”, “w” );//以可寫的方式打開一個文件,如果不存在就創(chuàng)建一個同名文件

assert( fp ); //所以這里不會出錯

fclose( fp );

fp = fopen( “noexitfile.txt”, “r” );//以只讀的方式打開一個文件,如果不存在就打開文件失敗

assert( fp ); //所以這里出錯

fclose( fp ); //程序永遠都執(zhí)行不到這里來

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的缺點是,頻繁的調(diào)用會極大的影響程序的性能,增加額外的開銷。

在調(diào)試結(jié)束后,可以通過在包含#include 《assert.h》的語句之前插入 #define NDEBUG 來禁用assert調(diào)用,示例代碼如下:

#include 《stdio.h》

#define NDEBUG

#include 《assert.h》

用法總結(jié)與注意事項:

1)在函數(shù)開始處檢驗傳入?yún)?shù)的合法性

如:

int resetBufferSize(int nNewSize)

{

//功能:改變緩沖區(qū)大小,

//參數(shù):nNewSize 緩沖區(qū)新長度

//返回值:緩沖區(qū)當(dāng)前長度

//說明:保持原信息內(nèi)容不變 nNewSize《=0表示清除緩沖區(qū)

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)不能使用改變環(huán)境的語句,因為assert只在DEBUG個生效,如果這么做,會使用程序在真正運行時遇到問題

錯誤: assert(i++ 《 100)

這是因為如果出錯,比如在執(zhí)行之前i=100,那么這條語句就不會執(zhí)行,那么i++這條命令就沒有執(zhí)行。

正確: assert(i 《 100)

i++;

4)assert和后面的語句應(yīng)空一行,以形成邏輯和視覺上的一致感

5)有的地方,assert不能代替條件過濾

上述也就是linux系統(tǒng)下使用assert函數(shù)方法的全部內(nèi)容了。如你還不知道在linux系統(tǒng)下如何使用assert函數(shù)的,不妨請你先看看上述的內(nèi)容啊!看完了你也就知道怎么使用assert函數(shù)了。有興趣的用戶可以去來了解一下。

標(biāo)簽: Linux系統(tǒng)
相關(guān)文章:
主站蜘蛛池模板: 酒吧霸屏软件_酒吧霸屏系统,酒吧微上墙,夜场霸屏软件,酒吧点歌软件,酒吧互动游戏,酒吧大屏幕软件系统下载 | 废气处理_废气处理设备_工业废气处理_江苏龙泰环保设备制造有限公司 | 灰板纸、灰底白、硬纸板等纸品生产商-金泊纸业| 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 聚合氯化铝_喷雾聚氯化铝_聚合氯化铝铁厂家_郑州亿升化工有限公司 | 带式压滤机_污泥压滤机_污泥脱水机_带式过滤机_带式压滤机厂家-河南恒磊环保设备有限公司 | 阜阳成人高考_阜阳成考报名时间_安徽省成人高考网 | 电液推杆生产厂家|电动推杆|液压推杆-扬州唯升机械有限公司 | 橡胶膜片,夹布膜片,橡胶隔膜密封,泵阀设备密封膜片-衡水汉丰橡塑科技公司网站 | 杭州中策电线|中策电缆|中策电线|杭州中策电缆|杭州中策电缆永通集团有限公司 | 杭州中央空调维修_冷却塔/新风机柜/热水器/锅炉除垢清洗_除垢剂_风机盘管_冷凝器清洗-杭州亿诺能源有限公司 | 防水接头-电缆防水接头-金属-电缆密封接头-不锈钢电缆接头 | 废旧物资回收公司_广州废旧设备回收_报废设备物资回收-益美工厂设备回收公司 | 乐泰胶水_loctite_乐泰胶_汉高乐泰授权(中国)总代理-鑫华良供应链 | 雨水收集系统厂家-雨水收集利用-模块雨水收集池-徐州博智环保科技有限公司 | 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 岸电电源-60HZ变频电源-大功率变频电源-济南诚雅电子科技有限公司 | YT保温材料_YT无机保温砂浆_外墙保温材料_南阳银通节能建材高新技术开发有限公司 | 青岛球场围网,青岛车间隔离网,青岛机器人围栏,青岛水源地围网,青岛围网,青岛隔离栅-青岛晟腾金属制品有限公司 | 爆破器材运输车|烟花爆竹运输车|1-9类危险品厢式运输车|湖北江南专用特种汽车有限公司 | 江门流水线|江门工作台|江门市伟涛行工业设备有限公司 | 除尘器布袋骨架,除尘器滤袋,除尘器骨架,电磁脉冲阀膜片,卸灰阀,螺旋输送机-泊头市天润环保机械设备有限公司 | 泰兴市热钻机械有限公司-热熔钻孔机-数控热熔钻-热熔钻孔攻牙一体机 | 托利多电子平台秤-高精度接线盒-托利多高精度电子秤|百科 | 智能风向风速仪,风速告警仪,数字温湿仪,综合气象仪(气象五要素)-上海风云气象仪器有限公司 | 全自动五线打端沾锡机,全自动裁线剥皮双头沾锡机,全自动尼龙扎带机-东莞市海文能机械设备有限公司 | 箱式破碎机_移动方箱式破碎机/价格/厂家_【华盛铭重工】 | 阻垢剂,反渗透阻垢剂,缓蚀阻垢剂-山东普尼奥水处理科技有限公司 真空粉体取样阀,电动楔式闸阀,电动针型阀-耐苛尔(上海)自动化仪表有限公司 | 农产品溯源系统_农产品质量安全追溯系统_溯源系统 | 环氧树脂地坪漆_济宁市新天地漆业有限公司 | 好物生环保网、环保论坛 - 环保人的学习交流平台 | 酶联免疫分析仪-多管旋涡混合仪|混合器-莱普特科学仪器(北京)有限公司 | 不锈钢闸阀_球阀_蝶阀_止回阀_调节阀_截止阀-可拉伐阀门(上海)有限公司 | 单机除尘器 骨架-脉冲除尘器设备生产厂家-润天环保设备 | 全自动实验室洗瓶机,移液管|培养皿|进样瓶清洗机,清洗剂-广州摩特伟希尔机械设备有限责任公司 | 耐破强度测试仪-纸箱破裂强度试验机-济南三泉中石单品站 | 家庭教育吧-在线家庭教育平台,专注青少年家庭教育 | 润滑脂-高温润滑脂-轴承润滑脂-食品级润滑油-索科润滑油脂厂家 | 耐酸碱胶管_耐腐蚀软管总成_化学品输送软管_漯河利通液压科技耐油耐磨喷砂软管|耐腐蚀化学软管 | 对照品_中药对照品_标准品_对照药材_「格利普」高纯中药标准品厂家-成都格利普生物科技有限公司 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | 活性炭厂家-蜂窝活性炭-粉状/柱状/果壳/椰壳活性炭-大千净化-活性炭 |