/ 常規(guī)出牌,首先聊一聊 /
c語(yǔ)言中的#號(hào)確實(shí)用得挺多的,比如說最開始編程的時(shí)候,大家最喜歡的#include…,確實(shí)有了這個(gè)東西我們就可以調(diào)用了我們想調(diào)用的東西了,心里必定歡喜!一般代碼量,或者閱碼量不多的筒子們,可能熟悉的#還有宏定義#define,或者是預(yù)編譯#if 或者更進(jìn)一步#ifndef等預(yù)編譯符號(hào),應(yīng)該大部分小伙伴不太用到#號(hào)的其他功能了?。ü?,其實(shí)我也差不多吧!)所以最近也是學(xué)習(xí)總結(jié)了一些,可能以后也用不太上,可能水平還沒達(dá)到,不過對(duì)于以后閱讀各路大神的代碼,應(yīng)該會(huì)幫助不少,同時(shí)跟大家首先說明一個(gè)非常重要的一點(diǎn),大部分帶#的處理都是在預(yù)編譯階段,比如說宏定義,預(yù)編譯,包括后面說到的宏轉(zhuǎn)字符串,連接記號(hào)等!
/ 該出一些套路了 /
知識(shí)點(diǎn)1:將宏參數(shù)轉(zhuǎn)化為字符串
例如,#define BUG(a) #a 這樣我們使用BUG(123)表示的就是字符串123直接可以printf(BUG(123));打印出字符串123.
知識(shí)點(diǎn)2:將##前后的標(biāo)記進(jìn)行合并
例如,#define DEBUG(a) debug##a
這樣我們使用的時(shí)候int DEBUG(1)=5;其實(shí)這樣就定義了一個(gè)int類型的變量debug1=5;
注意點(diǎn):對(duì)于#和##號(hào),其作為#號(hào)的參數(shù)和作為##號(hào)的參數(shù),即使是另外一個(gè)宏也不進(jìn)行展開,而是作為一個(gè)整體以字符串輸出,例如,
#define debug(a,b) a##b;
#define var(c) #c
然后我們?cè)诔绦蛑惺褂昧藇ar(debug(1,2)),這樣我們最終輸出的是debug(1,2)這個(gè)字符串表達(dá)式而不會(huì)輸出12,如果我們特別想過得12,那么多定義一個(gè)宏,#define temp(d) var(d),這樣就沒有參數(shù)debug(1,2)沒有直接對(duì)應(yīng)#,最終結(jié)果就是12.
對(duì)于這兩種#號(hào)實(shí)際應(yīng)用中的使用,主要是簡(jiǎn)化代碼,也可以說是擴(kuò)展了宏定義!
審核編輯:劉清
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7632瀏覽量
141768 -
字符串
+關(guān)注
關(guān)注
1文章
590瀏覽量
22287
發(fā)布評(píng)論請(qǐng)先 登錄
一些小眾的C語(yǔ)言知識(shí)點(diǎn)
嵌入式C語(yǔ)言知識(shí)點(diǎn)總結(jié)
C51單片機(jī)及C語(yǔ)言知識(shí)點(diǎn)必備秘籍
【信盈達(dá)】C語(yǔ)言知識(shí)點(diǎn)的總結(jié)
【每日一知識(shí)點(diǎn)】C語(yǔ)言中const詳解
關(guān)于c語(yǔ)言中數(shù)組下標(biāo)的加減平移知識(shí)點(diǎn)總結(jié)不看肯定后悔
C語(yǔ)言程序小知識(shí)點(diǎn)總結(jié)
嵌入式C語(yǔ)言的知識(shí)點(diǎn)匯總,絕對(duì)實(shí)用
C51語(yǔ)言的基礎(chǔ)知識(shí)點(diǎn)實(shí)例講解

匯總和深挖C語(yǔ)言中宏定義所有的知識(shí)點(diǎn)

STM32中重要的C語(yǔ)言知識(shí)點(diǎn)總結(jié)

評(píng)論