#define宏定義中的#献起,##洋访,@#,\ 這些符號(hào)的神奇用法

先看下面三條語(yǔ)句:

#define Conn(x,y) x##y
#define ToChar(x) #@x
#define ToString(x) #x

1. ## 連接操作符

##表示連接 , x##y表示什么谴餐?表示x連接y姻政,舉例說(shuō):

int n = Conn(123,456);
     ==> int n=123456;
char* str = Conn("asdf", "adf");
     ==> char* str = "asdfadf";

怎么樣,很神奇吧岂嗓!

需要注意的是汁展,##的左右符號(hào)必須能夠組成一個(gè)有意義的符號(hào),否則預(yù)處理器會(huì)報(bào)錯(cuò)厌殉。

2. #@ 字符化操作符

#@x只能用于有傳入?yún)?shù)的宏定義中食绿,且必須置于宏定義體中的參數(shù)名前。作用是將傳的單字符參數(shù)名轉(zhuǎn)換成字符公罕,以一對(duì)單引用括起來(lái)其實(shí)就是給x加上單引號(hào)器紧,結(jié)果返回是一個(gè)const char

舉例說(shuō):

char a = ToChar(1);
     ==> char a='1';

做個(gè)越界試驗(yàn)

char a = ToChar(123);
     ==> char a='3';

但是如果你的參數(shù)超過(guò)四個(gè)字符楼眷,編譯器就給給你報(bào)錯(cuò)了

铲汪!error C2015: too many characters in constant :P

3. # 字符串化操作符

#表示字符串化操作符(stringification)。其作用是:將宏定義中的傳入?yún)?shù)名轉(zhuǎn)換成用一對(duì)雙引號(hào)括起來(lái)參數(shù)名字符串罐柳。其只能用于有傳入?yún)?shù)的宏定義中掌腰,且必須置于宏定義體中的參數(shù)名前。說(shuō)白了硝清,他是給x加雙引號(hào):

 char* str = ToString(123132);
 ==> char* str="123132";

如果你想要對(duì)展開(kāi)后的宏參數(shù)進(jìn)行字符串化辅斟,則需要使用兩層宏。

#define xstr(s) str(s)
#define str(s) #s
#define foo 4
str (foo)
     ==> "foo"
xstr (foo)
     ==> xstr (4)
     ==> str (4)
     ==> "4"

s參數(shù)在str宏中被字符串化芦拿,所以它不是優(yōu)先被宏展開(kāi)士飒。然而s參數(shù)是xstr宏的一個(gè)普通參數(shù),在被傳遞到str宏之前已經(jīng)被宏展開(kāi)蔗崎。

4. \ 行繼續(xù)操作

\ 行繼續(xù)操作當(dāng)定義的宏不能用一行表達(dá)完整時(shí)酵幕,可以用\(反斜線)表示下一行繼續(xù)此宏的定義。

注意:最后一行不要加續(xù)行符啊.

VC的預(yù)處理器在編譯之前會(huì)自動(dòng)將\與換行回車(chē)去掉
(寫(xiě)成多行時(shí)缓苛,反斜杠后不能有空格芳撒,否則編譯器(ARM或VC)會(huì)報(bào)錯(cuò)!)未桥,這樣一來(lái)既不影響閱讀,又不影響邏輯,皆大歡喜.

5. VA_ARGS

__VA_ARGS__宏用來(lái)接受不定數(shù)量的參數(shù)笔刹。例如:

#define eprintf(...) fprintf (stderr, __VA_ARGS__)

eprintf ("%s:%d: ", input_file, lineno)
==>  fprintf (stderr, "%s:%d: ", input_file, lineno)

當(dāng)__VA_ARGS__宏前面##時(shí),可以省略參數(shù)輸入冬耿。
例如:

#define eprintf(format, ...) fprintf (stderr, format, ##__VA_ARGS__)

eprintf ("success!\n")
==> fprintf(stderr, "success!\n");
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末舌菜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子亦镶,更是在濱河造成了極大的恐慌日月,老刑警劉巖袱瓮,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異爱咬,居然都是意外死亡尺借,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)精拟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)燎斩,“玉大人,你說(shuō)我怎么就攤上這事串前√崩铮” “怎么了实蔽?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵荡碾,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我局装,道長(zhǎng)坛吁,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任铐尚,我火速辦了婚禮拨脉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宣增。我一直安慰自己玫膀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布爹脾。 她就那樣靜靜地躺著帖旨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪灵妨。 梳的紋絲不亂的頭發(fā)上解阅,一...
    開(kāi)封第一講書(shū)人閱讀 51,573評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音泌霍,去河邊找鬼货抄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛朱转,可吹牛的內(nèi)容都是我干的蟹地。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼藤为,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼怪与!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起凉蜂,我...
    開(kāi)封第一講書(shū)人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤琼梆,失蹤者是張志新(化名)和其女友劉穎性誉,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體茎杂,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡错览,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了煌往。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倾哺。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖刽脖,靈堂內(nèi)的尸體忽然破棺而出羞海,到底是詐尸還是另有隱情,我是刑警寧澤曲管,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布却邓,位于F島的核電站,受9級(jí)特大地震影響院水,放射性物質(zhì)發(fā)生泄漏腊徙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一檬某、第九天 我趴在偏房一處隱蔽的房頂上張望撬腾。 院中可真熱鬧,春花似錦恢恼、人聲如沸民傻。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)漓踢。三九已至,卻和暖如春和簸,著一層夾襖步出監(jiān)牢的瞬間彭雾,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工锁保, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留薯酝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓爽柒,卻偏偏與公主長(zhǎng)得像吴菠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子浩村,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 宏做葵,簡(jiǎn)單來(lái)說(shuō)就是按預(yù)定義的規(guī)則來(lái)替換相應(yīng)的文本內(nèi)容,被替換的文本內(nèi)容可以是對(duì)象也可以是函數(shù)心墅。既然是替換酿矢,那就需要遵...
    金小俊閱讀 4,676評(píng)論 6 54
  • C中的預(yù)編譯宏定義 2009-02-10 作者: infobillows 來(lái)源:網(wǎng)絡(luò) 在將一個(gè)C源程序轉(zhuǎn)換為可執(zhí)行...
    白水灬煮一切閱讀 1,594評(píng)論 0 5
  • 前言 在ReactiveCocoa 中榨乎,開(kāi)源庫(kù)作者為我們提供了很多種魔法,“黑”魔法瘫筐,“紅”魔法……今天就讓先來(lái)看...
    一縷殤流化隱半邊冰霜閱讀 8,977評(píng)論 20 97
  • 宏定義在C系開(kāi)發(fā)中可以說(shuō)占有舉足輕重的作用蜜暑。底層框架自不必說(shuō),為了編譯優(yōu)化和方便策肝,以及跨平臺(tái)能力肛捍,宏被大量使用,可...
    你好自己閱讀 1,054評(píng)論 0 5
  • 四月里之众,就是要說(shuō)這段話拙毫。 你是人間四月天 最近能夠聽(tīng)到成長(zhǎng)的聲音就像竹子一樣在不斷的拔節(jié),不錯(cuò)棺禾,就是這種feel缀蹄。...
    布衣華箏閱讀 299評(píng)論 0 2