C語言瑣碎記錄之#define宏的用法【順便提提 __FILE__,__LINE__的用法】

來源:互聯網
上載者:User

C語言的#define 簡而言之 就是 替換你的代碼為目標代碼的。

最近我有在用,比如

#define PRINT_LINE(FP,MSG)    fprintf(FP,"%s:%d %s\n",__FILE__,__LINE__,MSG)

#define free_safe(EXP) if((EXP)!=NULL && \
(unsigned int)(EXP)>(unsigned int)0x07000000 && \
(unsigned int)(EXP)<(unsigned int)0xffffffff ){\
free((EXP));\
}else{\
fprintf(stderr,"%s:%d:ERROR:%s=0x%08x cannot safe to free!!!!!!!\n",__FILE__,__LINE__,#EXP,(unsigned int)(EXP) );\
}

對於第一個 又涉及到了__FILE__ 和 __LINE__

對於第一個我很想做一個msg,...這樣傳遞多參數,或可變參數的宏,但是自己不知如何搞定!現在知道了

對於第二個 功能是為了先判斷,再安全free空間。而且還涉及到了一個技巧! #EXP將運算式 本身字串列印出來!

第一個多參數宏:

 #define PRINTF(out, ...) printf(out, ## __VA_ARGS__); fflush(stdout);

一個##__VA_ARGS__特殊的變數即可

而#EXP也算是一個特殊的變數。他們都是編譯器的buildin支援的變數吧。。。

__FILE__,__LINE__也是編譯器 所內建支援的變數。如同那個 什麼__DEBUG__什麼的 一樣。

這個很方便,但是當函數傳參的話,比較麻煩,希望能夠使用者不寫__FILE,__LINE__也可以使用,所以使用#define偽函數是最好的方法!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.