久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    assert()函數用法總結

     ColonelLee 2013-10-15

      assert宏的原型定義在<assert.h>中,其作用是如果它的條件返回錯誤,則終止程序執行,原型定義:

    #include <assert.h>
    void assert( int expression );

      assert的作用是現計算表達式 expression ,如果其值為假(即為0),那么它先向stderr打印一條出錯信息,然后通過調用 abort 來終止程序運行。請看下面的程序清單badptr.c:

    復制代碼
    #include <stdio.h>
    #include
    <assert.h>
    #include
    <stdlib.h>
    int main( void )
    {
    FILE
    *fp;

    fp
    = fopen( "test.txt", "w" );//以可寫的方式打開一個文件,如果不存在就創建一個同名文件
    assert( fp ); //所以這里不會出錯
    fclose( fp );

    fp
    = fopen( "noexitfile.txt", "r" );//以只讀的方式打開一個文件,如果不存在就打開文件失敗
    assert( fp ); //所以這里出錯
    fclose( fp ); //程序永遠都執行不到這里來
    return 0;
    }
    復制代碼

    [root@localhost error_process]# gcc badptr.c 
    [root@localhost error_process]# ./a.out 
    a.out: badptr.c:14: main: Assertion `fp' failed.

      已放棄使用assert()的缺點是,頻繁的調用會極大的影響程序的性能,增加額外的開銷。在調試結束后,可以通過在包含#include <assert.h>的語句之前插入 #define NDEBUG 來禁用assert調用,示例代碼如下:

    #include <stdio.h>
    #define NDEBUG
    #include
    <assert.h>


    用法總結與注意事項:

      1)在函數開始處檢驗傳入參數的合法性如:

    復制代碼
    int resetBufferSize(int nNewSize)
    {
      //功能:改變緩沖區大小,
      //參數:nNewSize 緩沖區新長度
      //返回值:緩沖區當前長度
      //說明:保持原信息內容不變 nNewSize<=0表示清除緩沖區
      assert(nNewSize >= 0);
      assert(nNewSize
    <= MAX_BUFFER_SIZE);
      ...
    }
    復制代碼

      

      2)每個assert只檢驗一個條件,因為同時檢驗多個條件時,如果斷言失敗,無法直觀的判斷是哪個條件失敗,如:

      不好:

    assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize);

      好:

    assert(nOffset >= 0);
    assert(nOffset
    +nSize <= m_nInfomationSize);

      3)不能使用改變環境的語句,因為assert只在DEBUG個生效,如果這么做,會使用程序在真正運行時遇到問題,如:

      錯誤:

    assert(i++ < 100);

      這是因為如果出錯,比如在執行之前i=100,那么這條語句就不會執行,那么i++這條命令就沒有執行。

      正確:

     assert(i < 100);
    i
    ++;
      4)assert和后面的語句應空一行,以形成邏輯和視覺上的一致感。

      5)有的地方,assert不能代替條件過濾。
    assert是用來避免顯而易見的錯誤的,而不是處理異常的。錯誤和異常是不一樣的,錯誤是不應該出現的,異常是不可避免的。c語言異常可以通過條件判斷來處理,其它語言有各自的異常處理機制。

    一個非常簡單的使用assert的規律就是,在方法或者函數的最開始使用,如果在方法的中間使用則需要慎重考慮是否是應該的。方法的最開始還沒開始一個功能過程,在一個功能過程執行中出現的問題幾乎都是異常。

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 两个人看的WWW在线观看| 亚洲男女一区二区三区| 亚洲另类精品无码专区| 亚洲综合色婷婷六月丁香宅男大增| 国产伦码精品一区二区| 日韩在线视频观看免费网站| 2020无码专区人妻系列日韩| 翘臀少妇被扒开屁股日出水爆乳| 亚洲色偷偷色噜噜狠狠99| 久久精品国产中文字幕| 精品 日韩 国产 欧美 视频| 国产AV大陆精品一区二区三区| 一卡2卡三卡4卡免费网站| 国产精品国产三级国产AV主播| 91中文字幕一区在线| 亚洲AV天天做在线观看 | 国产精品国产三级国产试看| 少妇办公室好紧好爽再浪一点| 国产亚洲精久久久久久无码| 国产精品日日摸夜夜添夜夜添无码| 国产人妻久久精品一区| 亚洲人成小说网站色在线 | 日韩在线看片免费观看软件| 国产精品自在线拍国产手机版 | 国产亚洲国产精品二区| 亚洲AV天天做在线观看| 日韩精品亚洲专在线电影| 全国最大的成人网站| 99在线精品国自产拍中文字幕| 久久精品国产亚洲AV无码偷窥| 18禁超污无遮挡无码网址| 真人性囗交视频| 12裸体自慰免费观看网站 | 宅男噜噜噜66网站高清| 国产精品二区中文字幕| 亚洲AV片一区二区三区| 精品卡一卡二卡乱码高清| A毛片终身免费观看网站| 中文成人无码精品久久久| 久久婷婷大香萑太香蕉AV人| 国产对白老熟女正在播放|