程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> <cassert>,cassert

<cassert>,cassert

編輯:C++入門知識

<cassert>,cassert


文件名:

   <cassert> (assert.h) 

  這是一個C語言的診斷庫,assert.h文件中定義了一個可作為標准調試工具的宏函數: assert ;

下面介紹這個宏函數:assert

函數原型:

void assert (int expression);

 

函數描述:

  如果這個宏函數形式的參數(expression)等於零,也就是說參數的表達式等價於false,那麼就會有一條消息會被寫入到標准錯誤設備,並且調用abort()函數來終止程序的運行;

這條特殊消息的顯示依賴於特定庫的實現,但是至少包括: 錯誤參數的陳述,源文件的名稱,發生錯誤的行號;

  通常的表達形式是: Assertion failed: 參數 文件名 行號 ;

  這個宏定義無法使用if,因為在你敲上 #include <assert.h> 的那一刻,一個名為NDEBUG的宏定義就已被聲明了,這意味著當調試程序的時候程序員可以按照需要敲許多 assert() 在代碼中,並且在發布release版本時只需要簡單的在代碼的開頭處並要在 <assert.h> 之前敲上

    #define NDEBUG

  就可以禁止全部 assert 的作用;

因此,這個宏定義是被設計來捕捉編程中的錯誤,而不是用戶或運行時錯誤,因為它通常在程序調試完成後會被禁止.

函數參數:

   int expression 

    expression可以是一個待計算的表達式,如果表達式的運算結果是0,這將導致斷言失敗(assertion failure)並終止程序;

函數返回值:

   void 

示例:

 1 /* assert example */
 2 #include <stdio.h>      /* printf */
 3 #include <assert.h>     /* assert */
 4 
 5 void print_number(int* myInt) {
 6   assert (myInt!=NULL); 
 7   printf ("%d\n",*myInt);
 8 }
 9 
10 int main ()
11 {
12   int a=10;
13   int * b = NULL;
14   int * c = NULL;
15 
16   b=&a;
17 
18   print_number (b);
19   print_number (c);
20 
21   return 0;

在這個栗子中,在程序運行時當 print_number(int *) 函數傳入了一個空指針作為實參,assert就會終止它.這發生在第二次調用 print_number(int *) 的時候,這時會引發一個斷言失敗(assertion failure)來標記(signal)這個BUG;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved