ASSERT與VERIFY巨集的區別

2021-06-16 09:45:27 字數 738 閱讀 7379

1 assert與verify巨集在debug模式下作用基本一致,二者都對表示式的值進行計算,如果值為非0,則什麼事也不做;如果值為0,則輸出診斷資訊。

2 assert與verify巨集在release模式下效果完全不一樣。assert不計算表示式的值,也不會輸出診斷資訊;verify計算表示式的值,但不管值為0還是非0都不會輸出診斷資訊。verify與assert用在程式除錯上並無本質上的區別。

此外,trace() 巨集的編譯也受 _debug 控制。

所有這些斷言都只在 debug版中才被編譯,而在 release 版中被忽略。唯一的例外是 verify() 。事實上,這些巨集都是呼叫了 assert() 函式,只不過附加了一些與庫有關的除錯**。如果你在這些巨集中加入了任何程式**,而不只是布林表示式(例如賦值、能改變變數值的函式呼叫 等),那麼 release 版都不會執行這些操作,從而造成錯誤。初學者很容易犯這類錯誤,查詢的方法也很簡單,因為這些巨集都已在上面列出,只要利用 vc++ 的 find in files 功能在工程所有檔案中找到用這些巨集的地方再一一檢查即可。另外,有些高手可能還會加入 #ifdef _debug 之類的條件編譯,也要注意一下。

順便值得一提的是 verify() 巨集,這個巨集允許你將程式**放在布林表示式裡。這個巨集通常用來檢查 windows api 的返回值。有些人可能為這個原因而濫用 verify() ,事實上這是危險的,因為 verify() 違反了斷言的思想,不能使程式**和除錯**完全分離,最終可能會帶來很多麻煩。因此,專家們建議盡量少用這個巨集。

ASSERT與VERIFY巨集的區別

今天公司有同事問我assert與verify巨集有什麼區別,雖然平時常用這兩個巨集對一些變數在debug模式下作判斷,但一時還真答不上來二者之間的具體差別,看來只是知其然不知其所以然。後來查了一些資料,總算弄清楚了二者之間的區別,整理後與同事交流了一番,感覺收穫還是蠻大的。下面對我的理解進行了總結 ...

斷言 assert 與驗證 verify

斷言 assert 與驗證 verify 什麼時候使用斷言命令,什麼時候使用驗證命令?這取決於你。差別在於在檢查失敗時,你想讓測試程式 做什麼。你想讓測試終止,還是想繼續而只簡單地記錄檢查失敗?這需要權衡。如果您使用的斷言,測試將在檢查失敗時停止,並不執行任何後續的檢查。有時候,也許是 經常的,這是...

ASSERT和VERIFY的區別

assert和verify的區別 1 assert與verify巨集在debug模式下作用基本一致,二者都對表示式的值進行計算,如果值為非0,則什麼事也不做 如果值為0,則輸出診斷資訊。2 assert與verify巨集在release模式下效果完全不一樣。assert不計算表示式的值,也不會輸出診...