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

          主站蜘蛛池模板: 望江县| 贵定县| 大宁县| 正宁县| 平阴县| 中宁县| 临猗县| 襄城县| 澄江县| 青龙| 吉林市| 双城市| 怀柔区| 溆浦县| 尉氏县| 盐池县| 尼玛县| 凭祥市| 龙海市| 烟台市| 深水埗区| 黄龙县| 荆门市| 汽车| 恩平市| 朔州市| 镇雄县| 兴安盟| 丹巴县| 任丘市| 理塘县| 财经| 蚌埠市| 屯昌县| 泾川县| 固安县| 曲沃县| 扎兰屯市| 灌云县| 永泰县| 青田县|