斷言(assert)有多重要,你不會不知道吧
本文轉載自微信公眾號「編程學習基地」,作者deroy 。轉載本文請聯(lián)系編程學習基地公眾號。
斷言(assert)
編寫代碼時,我們總是會做出一些假設,斷言就是用于在代碼中捕捉這些假設。斷言表示為一些布爾表達式,程序員相信在程序中的某個特定點該表達式值為真,可以在任何時候啟用和禁用斷言驗證,因此可以在測試時啟用斷言而在部署時禁用斷言。同樣,程序投入運行后,最終用戶在遇到問題時可以重新啟用斷言。
簡單來說如果結果和你的預期一樣,那么OK,結果為真繼續(xù)運行.如果結果和預期不符,那么程序會拋出一個系統(tǒng)級錯誤(不是異常),并且終止程序運行。
assert() 用法
assert宏的原型定義在
- #include <assert.h>
- void assert( int expression ); //expression:布爾表達式
assert的作用是現計算表達式 expression ,如果其值為假(即為0),那么它先向stderr打印一條出錯信息
然后通過調用 abort 來終止程序運行。
示例:
- #include <stdio.h>
- #include <assert.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;
- }
運行報錯如下:
控制臺輸出如下:
- Assertion failed: fp, file D:\vs2019\Console\微信公眾號推送\微信公眾號推送\微信公眾號推送.cpp, line 11
工程文件使用示例:
- void resize(int num)
- {
- if(num<0)
- assert(nullptr);
- if(num >len)
- //...
- }
作者:夢凡