ifdef DEBUG 使用總結

2021-06-28 02:46:55 字數 1399 閱讀 8777

#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...