最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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)遵守國家法律
洪湖市| 合作市| 胶南市| 平江县| 镇沅| 瓦房店市| 北海市| 青田县| 普安县| 手游| 蚌埠市| 巴塘县| 武强县| 安远县| 屏东市| 克什克腾旗| 竹北市| 抚顺县| 平度市| 六盘水市| 南陵县| 普格县| 西宁市| 紫云| 伊通| 鹿泉市| 临漳县| 襄垣县| 邯郸县| 龙胜| 吉隆县| 武宣县| 得荣县| 铜川市| 蒙山县| 毕节市| 洛宁县| 富阳市| 河津市| 湟中县| 黄梅县|