簡單介紹以下幾個巨集

2022-08-16 12:57:11 字數 941 閱讀 2466

簡單介紹以下幾個巨集:

1) __va_args__ 是乙個可變引數的巨集,這個可變引數的巨集是新的c99規範中新增的,目前似乎只有gcc支援(vc6.0的編譯器不支援)。巨集前面加上##的作用在於,當可變引數的個數為0時,這裡的##起到把前面多餘的","去掉,否則會編譯出錯。

2) __file__ 巨集在預編譯時會替換成當前的源檔名

3) __line__巨集在預編譯時會替換成當前的行號

4) __function__巨集在預編譯時會替換成當前的函式名稱

1.重新定義系統的nslog,__optimize__ 是release 缺省會加的巨集

#ifndef __optimize__  

#define nslog(...) nslog(__va_args__)  

#else  

#define nslog(...){}  

#endif

2.直接自己寫#define,當release版本的時候把#define 注釋掉即可

#define ios_debug

#ifdef ios_debug  

#define nslog(...) nslog(__va_args__)  

#endif  

3.#ifdef debug    

# define dlog(format, ...) nslog((@"[檔名:%s]" "[函式名:%s]" "[行號:%d]" format), __file__, __function__, __line__, ##__va_args__);    

#else    

# define dlog(...);    

#endif    

這種方式需要修改專案的配置,使得在debug編譯的時候,編譯dlog的巨集,產生詳細的日誌資訊,而release的時候,不產生任何控制台輸出。

相比而言,還是第一種比較方便。

C C 中幾個巨集的簡單總結

有人視巨集為洪水猛獸,甚至要求完全從c c 中摒棄,有人則認為巨集為至尊寶典,在邏輯 中都大量使用。個人認為這是個仁者見仁智者見智的問題,摒棄就沒必要了,看看巨集在mfc和atl中的一些經典應用,你會發現如果不使用巨集來實現一些訊息對映和物件對映神馬的那將讓 苦逼 程式設計師多花費多少寶貴的時間。當...

C C 中幾個巨集的簡單總結

c c 中幾個巨集的簡單總結 環境 vs2005 xpsp3 有人視巨集為洪水猛獸,甚至要求完全從c c 中摒棄,有人則認為巨集為至尊寶典,在邏輯 中都大量使用。個人認為這是個仁者見仁智者見智的問題,摒棄就沒必要了,看看巨集在mfc和atl中的一些經典應用,你會發現如果不使用巨集來實現一些訊息對映和...

define 巨集幾個細節

要做乙個自動增加版本號的小東西。參考了 http www.biasecurities.com blogs jim archive 2003 10 08 166.aspx 和 都是使用編譯器自帶的指令碼工具,我對bs的指令碼很不感冒並且它的移植性很差而且還有個問題,不知道是我沒找到還是什麼,這個指令碼...