五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

C/C++編程筆記:C語言被人遺忘的運(yùn)算符,了解三點(diǎn)即可掌握!

2020-08-20 21:32 作者:C語言編程__Plus  | 我要投稿

前言

本文主要介紹的是C語言中被人遺忘的運(yùn)算符"## ",這是很多學(xué)習(xí)C語言的人基本都沒有用過的一個(gè)知識(shí),希望對(duì)于廣大讀者學(xué)習(xí)C語言有一些幫助,深入了解C語言小知識(shí)


"##"的官方用法

它本質(zhì)上是一個(gè)“膠水運(yùn)算”,用于把參數(shù)宏中的“形參”與其它沒有天然分割的內(nèi)容粘連在一起,##就是個(gè)粘合劑,將前后兩部分粘合起來,也就是有“字符化”的意思。但是“##”不能隨意粘合任意字符,必須是合法的C語言標(biāo)示符。在單一的宏定義中,最多可以出現(xiàn)一次“#”或“##”預(yù)處理操作符。如果沒有指定與“#”或“##”預(yù)處理操作符相關(guān)的計(jì)算次序,則會(huì)產(chǎn)生問題。為避免該問題,在單一的宏定義中只能使用其中一種操作符(即,一份“#”或一個(gè)“ ## ”,或都不用)。例如:


實(shí)際中,我們想要定義不同的數(shù)組可以這樣直接這樣使用:

defArray(Tel,13);

//宏展開就是:

//charuserTel[13];

"## "的騷操作之不限參宏定義

可變參數(shù)宏的基礎(chǔ)知識(shí):

"..."只能放在參數(shù)宏形參列表的最后;

當(dāng)用戶的參數(shù)個(gè)數(shù)超過了規(guī)定的參數(shù)個(gè)數(shù)時(shí),所有多出來的內(nèi)容會(huì)一股腦的由“__VA_ARGS__”所背負(fù);

當(dāng)用戶的參數(shù)個(gè)數(shù)正好等于形參的個(gè)數(shù)時(shí),"__VA_ARGS__"就等效于一個(gè)空字符串

案例展示:


當(dāng)我們使用參數(shù)宏的時(shí)候在括號(hào)里不填寫任何內(nèi)容,最終會(huì)展開為僅有默認(rèn)值的10的情況,即:

result()的展開是(10)

當(dāng)我們提供了任意的有效值時(shí),則會(huì)被展開成逗號(hào)表達(dá)式,result(逗號(hào)表達(dá)式) 展開為(逗號(hào)表達(dá)式);所以result(10)為(10) result(1,2,3,4) 展開為(1,2,3,4);

"## "的騷操作之C缺省宏函數(shù)實(shí)現(xiàn)

這個(gè)技巧其實(shí)對(duì)API的封裝特別有效,它允許我們簡化函數(shù)API的使用,比如在用戶忽略的情況下,自動(dòng)給函數(shù)填充某些默認(rèn)值,而在用戶主動(dòng)提供參數(shù)的情況下,替代那些默認(rèn)值。類似于C++中的函數(shù)缺省思想。

假設(shè)我們有一個(gè)初始化函數(shù),初始化函數(shù)允許用戶通過結(jié)構(gòu)體來配置一些參數(shù):

typedefstructdataInfo{

...

} data;

intinitData(data* ptr);

為了簡化用戶的配置過程,初始化函數(shù)會(huì)檢查指針ptr是否為NULL,如果為NULL則自動(dòng)使用默認(rèn)配置,反之將使用用戶定義的配置。此時(shí),我們可以通過宏來提供默認(rèn)值NULL:


"## "的騷操作之消息處理的默認(rèn)配置

有些消息處理函數(shù)可以批量的處理某一類消息,而具體選中了哪些消息類別,則通常由二進(jìn)制掩碼來表示,此時(shí)我們完全可以借助宏來構(gòu)建一套語法糖,例如:


通過宏 add_msg 我們注意到,當(dāng)用戶刻意省略設(shè)置msk時(shí),我們就給出默認(rèn)值 0xFFFF——這很可能表示,在進(jìn)行消息處理的時(shí)候,消息必須嚴(yán)格匹配才能交給對(duì)應(yīng)的處理函數(shù);當(dāng)用戶指定 msk 時(shí),則可能表示某一類消息都交給同一個(gè)消息處理函數(shù)來處理。

希望對(duì)你有幫助~

自學(xué)C/C++編程難度很大,如果你想更快提升自己的編程能力和編寫項(xiàng)目的水平,歡迎一起共同成長!

學(xué)習(xí)C/C++編程知識(shí),提升C/C++編程能力,歡迎關(guān)注UP一起來成長!
另外,UP在主頁上傳了一些學(xué)習(xí)C/C++編程的視頻教程,有興趣或者正在學(xué)習(xí)的小伙伴一定要去看一看哦!會(huì)對(duì)你有幫助的~


C/C++編程筆記:C語言被人遺忘的運(yùn)算符,了解三點(diǎn)即可掌握!的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
宣武区| 镇宁| 曲阜市| 韩城市| 珠海市| 红桥区| 孝义市| 连云港市| 岚皋县| 巴东县| 曲周县| 汝阳县| 延川县| 昔阳县| 嘉善县| 丘北县| 富宁县| 民权县| 额尔古纳市| 林甸县| 怀宁县| 中江县| 尼玛县| 巴青县| 即墨市| 贵溪市| 萝北县| 盐边县| 韶山市| 高阳县| 红原县| 乐至县| 尤溪县| 浦东新区| 儋州市| 榆树市| 宜兴市| 临湘市| 龙海市| 富宁县| 吐鲁番市|