閱讀213 返回首頁    go 阿裏雲 go 技術社區[雲棲]


assert <assert.h> <cassert>

英文原文:https://www.cplusplus.com/reference/clibrary/cassert/assert/


void assert (int expression);

判定斷言


如果這個函數形式的宏的參數表達式等於0(例如,表達式值為false),一個消息將會寫到標準錯誤設備並且調用abort,終止程序運行。

顯示的詳細消息依賴於編譯器的具體實現,但是它應該包括:斷言失敗時的表達式,源文件名稱,斷言失敗出現時的行號。一個通常的格式是:
Assertion failed: expression, file filename, line line number 

如果包含assert.h文件之前,一個宏NDEBUG已經定義了,那麼判斷斷言的宏就被禁用了。這就允許程序員在調試程序的時候,在源代碼中包含很多斷言‭調用,之後,在發布產品時簡單的包含下麵一行,就可以禁用所有宏。
#define NDEBUG    
(放在源代碼中,包含assert.h文件之前。)

因此,這個宏通常被設計來捕捉程序錯誤,而不是用戶或者運行錯誤,而它通常在程序調試階段結束後被禁用。

參數
expression
     待求值表達式。如果表達式等於0,將會導致斷言失敗,並且終止程序。 

返回值


實例

/* assert example */
#include <stdio.h>
#include <assert.h>

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就會終止程序執行。這種情況發生在第二次調用print_number函數的時候,此時斷言失敗,提示這裏有BUG。

最後更新:2017-04-02 06:52:01

  上一篇:go android中include標簽的使用
  下一篇:go 《Java 本地接口規範》- 調用 API