目錄
- 一.assert 函式簡介
- 二.assert 函式使用
- 三.assert 函式用法總結與注意事項
- 四.猜你喜歡
零基礎 C/C++ 學習路線推薦 : C/C++ 學習目錄 >> C 語言基礎入門
一.assert 函式簡介
對于斷言,相信大家都不陌生,大多數編程語言也都有斷言這一特性,簡單地講,斷言就是對某種假設條件進行檢查,assert 宏原型定義:
//需要包含頭檔案 <assert.h>
#include <assert.h>
/*
描述:如果它的條件回傳錯誤,則終止程式執行
引數:
expression : 條件判斷或者運算式
*/
void assert( int expression );
assert 將通過檢查運算式 expression 的值來決定是否需要終止執行程式,也就是說,如果運算式 expression 的值為假(即為 0),那么它將首先向標準錯誤流 stderr 列印一條出錯資訊,然后再通過呼叫 abort 函式終止程式運行;否則,assert 無任何作用,
二.assert 函式使用
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 assert 函式
//@Time:2021/07/18 07:30
//@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
int main( void )
{
FILE *fp;
fp = fopen( "456.txt", "w" );//以可寫的方式打開一個檔案,如果不存在就創建一個同名檔案
assert( fp ); //所以這里不會出錯
fclose( fp );
fp = fopen( "123.txt", "r" );//以只讀的方式打開一個檔案,如果不存在就打開檔案失敗
assert( fp ); //所以這里出錯
fclose( fp ); //程式永遠都執行不到這里來
return 0;
}
默認情況下,assert 宏只有在 Debug 版本(內部除錯版本)中才能夠起作用,而在 Release 版本(發行版本)中將被忽略,
三.assert 函式用法總結與注意事項
1.使用 assert 在函式開始處檢驗傳入引數的合法性
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 assert 函式
//@Time:2021/07/18 07:30
//@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
int resetBufferSize(int nNewSize)
{
//功能:改變緩沖區大小,
//引數:nNewSize 緩沖區新長度
//回傳值:緩沖區當前長度
//說明:保持原資訊內容不變 nNewSize<=0表示清除緩沖區
assert(nNewSize >= 0);
assert(nNewSize <= MAX_BUFFER_SIZE);
...
}
2.每個 assert 只檢驗一個條件,因為同時檢驗多個條件時,如果斷言失敗,無法直觀的判斷是哪個條件失敗
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 assert 函式
//@Time:2021/07/18 07:30
//@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
//錯誤寫法
assert(a>=0 && b<=0 && c>0);
//正確寫法
assert(a>=0);
assert(b<=0);
assert(c>0);
3. assert 缺點是頻繁的呼叫會極大的影響程式的性能,增加額外的開銷,
四.猜你喜歡
- C 語言 陣列下標越界和記憶體溢位區別
- C 語言 使用指標遍歷陣列
- C 語言 指標和陣列區別
- C 語言 指標陣列和陣列指標區別
- C 語言 野指標
- C 語言 函式值傳遞和址傳遞
- C 語言 函式不定長引數
- C 語言 函式指標
- C 語言 指標函式
- C 語言 回呼函式 callback
- C 語言 #pragma once
- C 語言 #include <> 與 #include “” 區別
- C 語言 const 修飾函式引數
- C 語言 const 和 define 區別
- C 語言 #運算子
- C 語言 ##運算子
- C 語言 __VA_ARGS__
- C 語言 ##__VA_ARGS__
- C 語言 函式不定長引數 ##__VA_ARGS__經典案例
- C 語言 va_start 宏
- C 語言 va_end 宏
- C 語言 va_arg 宏
- C 語言 vprintf 函式
- C 語言 va_start / va_end / va_arg 自定義 printf 函式
- C 語言 main 函式
- C 語言 main 函式引數 main(int argc, char *argv[])
- C 語言 exit 函式
- C 語言 abort 函式
- C 語言 assert 函式
未經允許不得轉載:猿說編程 ? C 語言 assert 函式
本文由博客 - 猿說編程 猿說編程 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/353098.html
標籤:C
