<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>
            操作系統

            linux系統下如何使用assert函數

            時間:2025-05-09 16:08:15 操作系統 我要投稿
            • 相關推薦

            linux系統下如何使用assert函數

              只要看得懂程序的人都知道assert,在Windows下使用VC編寫,使用assert之后,只需在IDE中設置為debug版或者是release版,編譯器就會自動忽略掉assert。但是在Linux下,必須要在編譯命令中加入-DNDEBUG中,系統編譯時才不會將assert編譯進去。不然,程序運行時有可能會被assert中斷。那linux系統下如何使用assert函數呢?下面就和大家說一下linux系統下使用assert函數的方法。希望對大家有用,更多內容請關注應屆畢業生網!

              步驟如下:

              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不能代替條件過濾

              上述也就是linux系統下使用assert函數方法的全部內容了。如你還不知道在linux系統下如何使用assert函數的,不妨請你先看看上述的內容啊!看完了你也就知道怎么使用assert函數了。有興趣的用戶可以去來了解一下。

            【linux系統下如何使用assert函數】相關文章:

            如何在Linux系統下正確使用tar命令10-18

            Linux系統xlsatom命令如何使用06-23

            Linux系統下tar命令的使用技巧09-24

            如何查看Linux系統使用的版本信息07-13

            linux系統下dd命令的使用方法08-20

            linux系統下sudo命令使用方法09-22

            Linux系統下的ipmitool工具應該怎樣使用08-23

            window下如何安裝linux雙系統07-07

            Linux系統bunzip2命令如何使用07-26

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看