Assert(断言) 的用法
Assert
Assert是斷言的意思,頭文件為assert.h,
assert是一個(gè)宏
功 能: 測(cè)試一個(gè)條件并可能使程序終止
用 法: void assert(int test);
在單元測(cè)試中經(jīng)常使用斷言
斷言只有在Debug模式下才有效,它可以有兩種形式
1.assert Expression1
2.assert Expression1:Expression2
其中Expression1應(yīng)該總是一個(gè)布爾值,Expression2是斷言失敗時(shí)輸出的失敗消息的字符串。如果Expression1為假,則拋出一個(gè) AssertionError,這是一個(gè)錯(cuò)誤,而不是一個(gè)異常,也就是說(shuō)是一個(gè)不可控制異常(unchecked Exception),AssertionError由于是錯(cuò)誤,所以可以不捕獲,但不推薦這樣做,因?yàn)槟菢訒?huì)使你的系統(tǒng)進(jìn)入不穩(wěn)定狀態(tài)。
官方解釋是:編寫(xiě)代碼時(shí),我們總是會(huì)做出一些假設(shè),斷言就是用于在代碼中捕捉這些假設(shè),可以將斷言看作是異常處理的一種高級(jí)形式。斷言表示為一些布爾表達(dá)式,程序員相信在程序中的某個(gè)特定點(diǎn)該表達(dá)式值為真。可以在任何時(shí)候啟用和禁用斷言驗(yàn)證,因此可以在測(cè)試時(shí)啟用斷言,而在部署時(shí)禁用斷言。同樣,程序投入運(yùn)行后,最終用戶在遇到問(wèn)題時(shí)可以重新起用斷言。
通俗一點(diǎn)說(shuō):編寫(xiě)代碼時(shí),我們假設(shè)代碼運(yùn)行到某行時(shí),某些變量的值應(yīng)該是等于多少,如果不等于,說(shuō)明程序邏輯不對(duì),可能造成不穩(wěn)定,
比如,我之前定義了一個(gè)變量m ,在程序運(yùn)行過(guò)程中m的值是會(huì)改變的,依照正確的思路,程序運(yùn)行到100行時(shí)m的值應(yīng)該是100,那么,我就在程序的第101行寫(xiě)上 assert(m=100);
如果m==100,那么assert返回true,如果m!=100,那么assert會(huì)返回false,程序運(yùn)行到這里就會(huì)出現(xiàn)斷言錯(cuò)誤,
可見(jiàn)assert很大程度上輔助測(cè)試代碼的,讓代碼更強(qiáng)壯更穩(wěn)定
用法驗(yàn)證:
程序?qū)嵗?:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | // 0001.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include<assert.h> #include<stdio.h> #include<stdlib.h> struct?ITEM { ????? ????int?key; ????? ????int?value; ????? }; void?additem(struct?ITEM* itemptr) { ????? ????assert(itemptr!=NULL); ????? } int?main(int?argc,?char* argv[]) { ????additem(NULL); ????? ????return?0; ????? } |
?
實(shí)例2:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | // 0001.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include<stdio.h> #include<assert.h> #include<stdlib.h> int?main(int?argc,?char* argv[]) { FILE* fp; fp=fopen("test.txt","w");//以可寫(xiě)的方式打開(kāi)一個(gè)文件,如果不存在就創(chuàng)建一個(gè)同名文件 assert(fp);//所以這里不會(huì)出錯(cuò) fclose(fp); fp=fopen("noexitfile.txt","r");//以只讀的方式打開(kāi)一個(gè)文件,如果不存在就打開(kāi)文件失敗 assert(fp);//所以這里出錯(cuò) fclose(fp);//程序永遠(yuǎn)都執(zhí)行不到這里來(lái) ????return?0; ????? } |
?
轉(zhuǎn)載于:https://www.cnblogs.com/writeLessDoMore/p/6732522.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Assert(断言) 的用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 子串判断
- 下一篇: jQuery插件开发的两种方法及$.fn