C語言 assert 函數 - C語言零基礎入門教程


目錄

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

四.猜你喜歡

  1. C 語言 數組下標越界和內存溢出區別
  2. C 語言 使用指針遍歷數組
  3. C 語言 指針和數組區別
  4. C 語言 指針數組和數組指針區別
  5. C 語言 野指針
  6. C 語言 函數值傳遞和址傳遞
  7. C 語言 函數不定長參數
  8. C 語言 函數指針
  9. C 語言 指針函數
  10. C 語言 回調函數 callback
  11. C 語言 #pragma once
  12. C 語言 #include <> 與 #include “” 區別
  13. C 語言 const 修飾函數參數
  14. C 語言 const 和 define 區別
  15. C 語言 #運算符
  16. C 語言 ##運算符
  17. C 語言 __VA_ARGS__
  18. C 語言 ##__VA_ARGS__
  19. C 語言 函數不定長參數 ##__VA_ARGS__經典案例
  20. C 語言 va_start 宏
  21. C 語言 va_end 宏
  22. C 語言 va_arg 宏
  23. C 語言 vprintf 函數
  24. C 語言 va_start / va_end / va_arg 自定義 printf 函數
  25. C 語言 main 函數
  26. C 語言 main 函數參數 main(int argc, char *argv[])
  27. C 語言 exit 函數
  28. C 語言 abort 函數
  29. C 語言 assert 函數

未經允許不得轉載:猿說編程 » C 語言 assert 函數

本文由博客 - 猿說編程 猿說編程 發布!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM