函數(shù)原型
void assert (int expression);
assert的關(guān)鍵在于判斷expression的邏輯真假织阳,如果為false,就會(huì)在stderr上面打印一條包含“表達(dá)式,文件名攘蔽,行號(hào)”的錯(cuò)誤信息,然后調(diào)用abort結(jié)束整個(gè)程序呐粘。
實(shí)例
#include <iostream>
#include <assert.h>
#define NDEBUG // 可以禁止斷言
using namespace std;
int main() {
//測試true情況:以寫打開一個(gè)文件满俗,不存在則創(chuàng)建新文件
FILE *fpWrite = fopen("../testWrite", "w");
//不會(huì)出錯(cuò)
assert(fpWrite != NULL);
fclose(fpWrite);
cout << "執(zhí)行到了這里" << endl;
//測試false情況:以讀打開一個(gè)文件,不存在會(huì)失敗
FILE *fpRead = fopen("testRead", "r");
//會(huì)出錯(cuò)
assert(fpRead != NULL);
//程序調(diào)用abort退出作岖,不會(huì)執(zhí)行到此步
fclose(fpRead);
cout << "執(zhí)行不到這里" << endl;
return 0;
}
Assertion failed: (fpRead != NULL), function main, file /Users/shuai/CLionProjects/untitled/main.cpp, line 20.
執(zhí)行到了這里
常用在函數(shù)開始處檢驗(yàn)傳入?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);
...
}