<cassert>

assert

void assert (int expression);
評估斷言
如果這個函式形式的宏的引數 expression 等於零(即表示式為),一條訊息將被寫入標準錯誤裝置,並呼叫 abort 來終止程式執行。

顯示的訊息的具體內容取決於特定的庫實現,但它至少應包含:斷言失敗的 expression、原始檔的名稱以及它發生的行號。一個通常的表示式格式是

Assertion failed: expression, file filename, line line number

如果在包含 <assert.h> 的時候,一個名為 NDEBUG 的宏已經被定義,那麼這個宏就會被停用。這允許程式設計師在除錯程式時在原始碼中包含任意數量的 assert 呼叫,然後在釋出版本中透過簡單地新增一行程式碼來停用所有這些斷言,例如:
1
#define NDEBUG 
在程式碼的開頭,在包含 <assert.h> 之前。

因此,這個宏旨在捕獲程式設計錯誤,而不是使用者或執行時錯誤,因為它通常在程式退出除錯階段後被停用。

引數

expression
要被評估的表示式。如果該表示式的計算結果為 0,則會導致斷言失敗,從而終止程式。

返回值



示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/* assert example */
#include <stdio.h>      /* printf */
#include <assert.h>     /* assert */

void print_number(int* myInt) {
  assert (myInt!=NULL);
  printf ("%d\n",*myInt);
}

int main ()
{
  int a=10;
  int * b = NULL;
  int * c = NULL;

  b=&a;

  print_number (b);
  print_number (c);

  return 0;
}

在此示例中,如果 print_number 以空指標作為屬性被呼叫,assert 將用於中止程式執行。這發生在對該函式的第二次呼叫時,它觸發了斷言失敗以提示這個錯誤。