#ifdef _debug
virtual void assertvalid() const; //assert(斷言)valid(有效的,正確的)
virtual void dump(cdumpcontext& dc) const; //儲存上下文
#endif
這兩個函式是除錯用的,第乙個函式檢查可用性,即是否有效
第二個函式如果未更改的話,最終呼叫的是cwnd::dump();
輸出視窗類名,標題名等一系列資訊(在輸出視窗中)
#ifdef _debug
#endif
這是條件編譯,即如果有#define _debug這兩個函式會編譯,否則忽略,
當你用debug生成時(相對於release)開發環境則自動的加上這個巨集定義,這兩個函式有效。 2
#ifdef _debug // 判斷是否定義_debug
#undef this_file // 取消this_file的定義
static char this_file=__file__; // 定義this_file指向檔名
#define new debug_new // 定義除錯new巨集,取代new關鍵字
#endif // 結束
如果定義了_debug,表示在除錯狀態下編譯,因此相應修改了兩個符號的定義
this_file是乙個char陣列全域性變數,字串值為當前檔案的全路徑,這樣在debug版本中當程式出錯時出錯處理**可用這個變數告訴你是哪個檔案中的**有問題。
定義 _debug後,由於定義了_debug,編譯器確定這是乙個除錯,編譯#ifdef _debug和#endif之間的**。#undef 表示清除當前定義的巨集,使得this_file無定義。__file__ 是編譯器能識別的事先定義的ansi c 的6個巨集之一。#define new debug_new
debug_new定位記憶體洩露並且跟蹤檔名.
///另一種解釋
#ifdef _debug //如果是debug狀態
#undef this_file //清除this_file
static char this_file=__file__; //定義this_file為 //__file__(這是當前檔案全路徑名字)
#define new debug_new //定義new為debug_new(這個可以檢測到內 //存洩露之類的問題,其實就是可以使用crt開頭的那幾個除錯函式)
#endif
ifdef DEBUG 使用總結
ifdef debug virtual void assertvalid const assert 斷言 valid 有效的,正確的 virtual void dump cdumpcontext dc const 儲存上下文 endif 這兩個函式是除錯用的,第乙個函式檢查可用性,即是否有效 第二個...
ifdef DEBUG 預編譯用法小結
在 ifdefine debug和對應的 endif中有 則這些 只有在除錯 debug 下才會被編譯。也就是說,如果你在release模式下,這些 根本不會存在於你的最終 裡頭。這就是說這些巨集 本身是面向編譯器使用的。不能用於實現我們的業務邏輯 這樣會帶來不良影響。這類巨集定義的乙個典型應用就是...
EJunGrid使用總結
1 1。0版沒有實現垂直方向上的對齊,procedure tobgui reportdesign.griddrawcelltext acanvas tcanvas const arect trect const acoord tpoint agrid tzjgrid const text strin...