jasmine214--love

          只有當你的內心總是充滿快樂、美好的愿望和寧靜時,你才能擁有強壯的體魄和明朗、快樂或者寧靜的面容。
          posts - 731, comments - 60, trackbacks - 0, articles - 0

          C++ Debug模式下--VERIFY的使用

          Posted on 2010-08-12 11:47 幻海藍夢 閱讀(1557) 評論(0)  編輯  收藏 所屬分類: C++
           

          原文:http://jazka.blog.51cto.com/809003/188130
          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() 違反了斷言的思想,不能使程序代碼和調試代碼完全分離,最終可能會帶來很多麻煩。因此,專家們建議盡量少用這個宏。

          主站蜘蛛池模板: 冀州市| 榆林市| 仁化县| 昆山市| 大余县| 饶平县| 惠安县| 广平县| 依安县| 唐河县| 金堂县| 太白县| 内丘县| 读书| 延庆县| 玉田县| 普兰县| 六盘水市| 定西市| 凤山县| 四会市| 扎兰屯市| 东城区| 楚雄市| 肥城市| 山东| 始兴县| 南召县| 金塔县| 兰考县| 湘西| 来凤县| 错那县| 隆尧县| 都昌县| 资中县| 德江县| 邯郸市| 新竹市| 迭部县| 延川县|