C小技巧之斷言

來源:互聯網
上載者:User

標籤:

  可以將斷言看作是異常處理的一種進階形式。斷言驗證可以在任何時候啟用和禁用,因此可以在測試時啟用斷言,而在部署時禁用斷言。可以在預計正常情況下程式不會到達的地方放置斷言。使用斷言測試方法執行的前置條件和後置條件 。使用斷言檢查類的不變狀態,確保任何情況下,某個變數的狀態必須滿足。放在函數參數的入口處檢查傳入參數的合法性。Assert 陳述式不是永遠會執行,可以屏蔽也可以啟用,這就要求assert不管是在屏蔽還是啟用的情況下都不能對我們本身代碼的功能有所影響,每個assert應該只檢驗一個條件。使用assert的缺點是,頻繁的調用會極大的影響程式的效能,增加額外的開銷。所以在調試結束後,可以通過在包含#include 的語句之前插入 #define NDEBUG 來禁用assert調用。

  原型定義:void assert( int expression );assert宏的原型定義在<assert.h>中,其作用是先計算運算式 expression ,如果expression的值為假(即為0),那麼它先向stderr列印一條出錯資訊,然後通過調用abort 來終止程式運行。

 1 /*******使用C內建斷言*******/ 2 #include <stdio.h>
  //#define NDEBUG   //開啟斷言
 3 #include <assert.h>
4 int main( void ) 5 { 6 int i; 7 i=1; 8 assert(i++); 9 10 printf("%d\n",i);11 return 0;12 }

運行結果

除了用C提供的斷言,也可以使用自訂的斷言

 1 /********使用自訂的斷言***********/ 2 #include <stdio.h> 3 #include <stdlib.h> 4 //#undef  _EXAM_ASSERT_TEST_    //禁用 5 #define  _EXAM_ASSERT_TEST_   //啟用 6 #ifdef _EXAM_ASSERT_TEST_     //啟用斷言測試 7     void assert_report( const char * file_name, const char *    function_name, unsigned int line_no ) 8     { 9         printf( "\n[EXAM]Error Report file_name: %s, function_name: %s, line %u\n", file_name, function_name, line_no );10         abort();11     }12     #define  ASSERT_REPORT( condition )       13     do{       14         if ( condition )       15             NULL;        16         else         17         assert_report( __FILE__, __func__, __LINE__ ); 18      }while(0)19 #else // 禁用斷言測試 20     #define ASSERT_REPORT( condition )  NULL 21 #endif /* end of ASSERT */22 23 int main( void )24 {25     int i;26     i=0;27     // assert(i++);28     ASSERT_REPORT(i);29     printf("%d\n",i);30     return 0;31 }    

 

C小技巧之斷言

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.