????????assert.h 頭?件定義了宏 assert() ,?于在運?時確保程序符合指定條件,如果不符合,就報錯終止運行。這個宏常常被稱為“斷?”。
assert(p != NULL);
代碼在程序運?到這??語句時,驗證變量 p 是否等于 NULL 。如果確實不等于 NULL ,程序繼續運?,否則就會終?運?,并且給出報錯信息提?.
????????assert() 宏接受?個表達式作為參數。如果該表達式為真(返回值?零), assert() 不會產? 任何作?,程序繼續運?。如果該表達式為假(返回值為零), assert() 就會報錯,在標準錯誤 流 stderr 中寫??條錯誤信息,顯?沒有通過的表達式,以及包含這個表達式的?件名和?號.
????????有?種?需更改代碼就能開啟或關閉 assert() 的機制。如果已經確認程序沒有問題,不需要再做斷言,就在 #include <?assert.h>語句的前?,定義?個宏 NDEBUG.然后,重新編譯程序,編譯器就會禁??件中所有的 assert() 語句.
#define NDEBUG?
#include <assert>
????????assert() 的缺點是,因為引?了額外的檢查,增加了程序的運?時間.所以在 VS 這樣的集成開 發環境中,在 Release 版本中,直接就是優化掉了.這樣在debug版本寫有利于程序員排查問題, 在 Release 版本不影響??使?時程序的效率.