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

歡迎光臨散文網(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)遵守國家法律
施甸县| 汶川县| 永和县| 类乌齐县| 桃江县| 榆树市| 高阳县| 大邑县| 喀什市| 涞水县| 慈溪市| 饶平县| 房山区| 扎鲁特旗| 县级市| 阜康市| 清徐县| 台州市| 孟津县| 电白县| 武威市| 且末县| 洛浦县| 麦盖提县| 静宁县| 蛟河市| 顺平县| 丹凤县| 长沙县| 兴化市| 沙河市| 云阳县| 新泰市| 沈阳市| 静宁县| 沿河| 怀远县| 浮梁县| 西城区| 龙门县| 惠东县|