日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

#和##寫出“秀”一點(diǎn)的代碼

冬至配餃子 ? 來源:最后一個(gè)bug ? 作者:bug菌 ? 2022-08-11 17:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

#和##對(duì)于大部分C語言玩得還算比較溜的朋友并不是很陌生,不過能把這兩個(gè)知識(shí)點(diǎn)游刃有余的應(yīng)用到所在代碼中的每個(gè)角落,似乎并沒有幾個(gè)人能夠做到,學(xué)的時(shí)候朗朗上口,而編碼的時(shí)候卻拋之腦后。

但是今天還是想重新介紹這兩個(gè)“兄弟”,希望大家能夠?qū)懗?秀"一點(diǎn)的代碼~

1、#和##基礎(chǔ)

對(duì)于這兩個(gè)語法的功能都比較簡單,且都是在

預(yù)處理階段

做一些工作 :

#主要是將宏參數(shù)轉(zhuǎn)化為字符串

##主要是將兩個(gè)標(biāo)識(shí)符拼接成一個(gè)標(biāo)識(shí)符

沒點(diǎn)代碼似乎并不是那么形象 :

參考demo:

pYYBAGL0zluACYjNAADPq4hIo50851.png

輸出結(jié)果:

poYBAGL0zm2AVtyJAAAmcrg7hqI889.png

從結(jié)果上看來似乎#僅僅只是代替了字符串的雙引號(hào),而##卻實(shí)現(xiàn)了標(biāo)識(shí)符的拼接,這樣就為編碼標(biāo)識(shí)符的處理上能夠帶來更多的可玩性。那么,下面bug菌跟大家具體展示一下他們的常用技巧:

2、#的玩法

1、標(biāo)識(shí)符的“字符串變量"

“#”一般結(jié)合打印語句組合成一個(gè)宏定義,可以方便的打印相關(guān)信息,下面給個(gè)簡單的實(shí)例就明白了。

poYBAGL0zoGADIkhAADSeljeKRQ791.png

輸出結(jié)果:

poYBAGL0zpiAFJ5ZAAAtJvQj9fg944.png

這樣的話就不需要總是采用雙引號(hào)來單獨(dú)書寫,同時(shí)你還可以繼續(xù)擴(kuò)展構(gòu)造更加靈活的宏。2、結(jié)合##進(jìn)行字符串拼接打印前面介紹了##進(jìn)行標(biāo)識(shí)符的拼接,那么實(shí)現(xiàn)拼接標(biāo)識(shí)符轉(zhuǎn)化為字符串看來很簡單吧,于是你會(huì)編寫了如下代碼:

poYBAGL0zqqAfcaQAACGvTONuOs330.png

暗自歡喜的編譯著,然而卻得到了如下結(jié)果:

poYBAGL0zrqAYk3ZAAAWu9H8nAY063.png

得到的并不是拼接以后你想要的uart1,難道不能這么玩?當(dāng)然不是,不然也不會(huì)在這里拿出來說 。首先要知道原因 : 進(jìn)行宏定義嵌套的情況,#或者##僅在當(dāng)前宏有效,嵌套宏中不會(huì)再次展開,既然當(dāng)前宏無法展開,那么我只能再加一級(jí)宏定義作為轉(zhuǎn)換宏進(jìn)行展開,看能不能解決該問題:

poYBAGL0zsuAKj0PAACb6YBeaEw850.png

此時(shí)輸出的結(jié)果符合我們的預(yù)期:

poYBAGL0ztyAORLuAAAamuC2BLc556.png

首先進(jìn)行第一層轉(zhuǎn)換宏替換處理掉##拼接符得到str(uart1),然后進(jìn)行字符串轉(zhuǎn)換符的處理為uart1字符串打印輸出,當(dāng)然以后你會(huì)遇到一些復(fù)雜的,不過要訣就是宏替換只會(huì)處理當(dāng)前的#或者##,否則就需要增加轉(zhuǎn)換宏提前進(jìn)行宏替換展開。所以采用##拼接出來的標(biāo)識(shí)符想要打印輸出的話,使用#進(jìn)行轉(zhuǎn)換是最直接、方便的。

3、##的玩法

##拼接符的玩法有點(diǎn)多,甚至有些還比較繞,當(dāng)然如果你游刃有余的話,這對(duì)于重構(gòu)代碼是一把“ 利器 ”。

1、在結(jié)構(gòu)體定義中的妙用

下面是bug菌經(jīng)常在項(xiàng)目代碼中用到的##結(jié)構(gòu)體定義法,也是非常多開源代碼中慣用的做法,相比常規(guī)的結(jié)構(gòu)體定義法,確實(shí)省去很多重復(fù)的代碼。比如下面的參考代碼 :

poYBAGL0zvKAQ-U1AADbGFWhUxI580.png

2、統(tǒng)一宏替換

拼接標(biāo)識(shí)符意味著符號(hào)的粒度更高,而這碎片化的符號(hào)進(jìn)行有效的管理,就可以使得符號(hào)更加具有通用性和靈活性。其實(shí)這種思想跟我們代碼模塊話是同樣的道理。來首先我們用一個(gè)兩層拼接體驗(yàn)一下:

pYYBAGL0zxWAdqXPAAHsk2LPMp4853.png

poYBAGL0zxuAed17AAALIYngyf0601.png

編寫的思路bug菌在代碼中跟大家都標(biāo)注了,相信大家一眼就能看懂,似乎并沒有想象中那么難。而在前面介紹##的基礎(chǔ)知識(shí)提過,只要轉(zhuǎn)換宏寫得夠多,你可以一層套一層,最終獲得你想要的標(biāo)識(shí)符,達(dá)到修改一個(gè)簡單的宏即可替換一整套宏的效果。所以關(guān)鍵還是你要清晰的把拼接變量找出來,bug菌這里僅展示了一個(gè)拼接變量,當(dāng)然多個(gè)也是同樣沒有問題的,跟我們函數(shù)傳遞參數(shù)一樣,不過這樣也會(huì)增加整個(gè)替換的復(fù)雜度,合理利用即可~


審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語言
    +關(guān)注

    關(guān)注

    183

    文章

    7646

    瀏覽量

    146202
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1322

    瀏覽量

    107028
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    596

    瀏覽量

    23223
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    用匯編給CH32寫了個(gè)本機(jī)代碼FORTH實(shí)現(xiàn)

    碎片問題,所以想著換個(gè)retro一點(diǎn)的東西,起初看了下上個(gè)世紀(jì)的單片機(jī)/微機(jī)basic實(shí)現(xiàn)非常節(jié)省內(nèi)存,但是實(shí)現(xiàn)起來有點(diǎn)復(fù)雜,后來看有人在單片機(jī)上用FORTH,所以自己拿匯編從頭實(shí)現(xiàn)了個(gè)原生
    發(fā)表于 03-19 10:47

    FPGA時(shí)序收斂的痛點(diǎn)與解決之道——從次高速接口調(diào)試談起

    的高速DDR接口調(diào)試,讓我深刻體會(huì)到,時(shí)序問題遠(yuǎn)不止“跑慢一點(diǎn)”那么簡單,它涉及器件結(jié)構(gòu)、時(shí)鐘特性、約束策略和工具理解的方方面面。 、問題的浮現(xiàn):看似正確的設(shè)計(jì)為何時(shí)序違例? 某項(xiàng)目需要實(shí)現(xiàn)個(gè)基于Xilinx FPGA的高速
    的頭像 發(fā)表于 03-11 11:43 ?352次閱讀

    法拉電容串聯(lián)和并聯(lián)哪個(gè)好一點(diǎn)呢?

    當(dāng)你考慮給汽車電瓶并聯(lián)法拉電容(超級(jí)電容)時(shí),你可能會(huì)疑惑:串聯(lián)與并聯(lián)哪個(gè)更好?這不僅關(guān)乎性能提升,還涉及到安全和成本
    的頭像 發(fā)表于 02-04 09:17 ?699次閱讀
    法拉電容串聯(lián)和并聯(lián)哪個(gè)好<b class='flag-5'>一點(diǎn)</b>呢?

    深視課堂丨點(diǎn)激光位移傳感器SD33系列一點(diǎn)示教操作指南(第三課)

    今天,我們將起學(xué)習(xí)深視智能SD33系列激光位移傳感器的一點(diǎn)示教模式操作方法。一點(diǎn)示教模式是通過設(shè)定個(gè)閾值點(diǎn)(far),使傳感器在測量值小
    的頭像 發(fā)表于 12-22 08:17 ?617次閱讀
    深視課堂丨<b class='flag-5'>點(diǎn)</b>激光位移傳感器SD33系列<b class='flag-5'>一點(diǎn)</b>示教操作指南(第三課)

    法拉電容一點(diǎn)電沒有還能用嗎為什么

    法拉電容即使完全沒電仍可恢復(fù)使用,因其儲(chǔ)能機(jī)制為物理雙電層理論,可逆性強(qiáng),無需化學(xué)反應(yīng),長期閑置后仍能恢復(fù)功能。
    的頭像 發(fā)表于 11-12 09:26 ?2157次閱讀
    法拉電容<b class='flag-5'>一點(diǎn)</b>電沒有還能用嗎為什么

    代碼格式化工具Clang-Format提升你的CW32工程質(zhì)量

    它能自動(dòng)統(tǒng)團(tuán)隊(duì)代碼風(fēng)格,讓不同開發(fā)者寫出代碼如出轍。就像 CW32 官方庫函數(shù)遵循統(tǒng)規(guī)范
    的頭像 發(fā)表于 10-09 17:43 ?1321次閱讀
    <b class='flag-5'>代碼</b>格式化工具Clang-Format提升你的CW32工程質(zhì)量

    為什么變壓器的鐵芯要接地,而且只能一點(diǎn)接地?

    變壓器作為電力系統(tǒng)中不可或缺的關(guān)鍵設(shè)備,其安全穩(wěn)定運(yùn)行對(duì)整個(gè)電網(wǎng)至關(guān)重要。在變壓器設(shè)計(jì)中,鐵芯接地是個(gè)看似簡單卻蘊(yùn)含深刻原理的技術(shù)細(xì)節(jié)。為什么鐵芯必須接地?又為何只能采用一點(diǎn)接地的方式?這需要
    的頭像 發(fā)表于 09-03 07:35 ?3426次閱讀

    0.04% vs 0.1%:精度差一點(diǎn),逆變器性能差距有多大?

    本文導(dǎo)讀臺(tái)光伏逆變器損失的功率可能僅僅源于0.3%的MPPT效率差距。這個(gè)足以影響產(chǎn)品競爭力的數(shù)字,可能并非算法優(yōu)劣,而在于測試源頭的精度選擇:是0.04%還是0.1%?本文通過四大測試場景的量化
    的頭像 發(fā)表于 08-20 11:32 ?1859次閱讀
    0.04% vs 0.1%:精度差<b class='flag-5'>一點(diǎn)</b>,逆變器性能差距有多大?

    請(qǐng)問如何使用ICP編程工具寫出序列號(hào)?

    如何使用ICP編程工具寫出序列號(hào)?
    發(fā)表于 08-19 07:01

    手機(jī)點(diǎn)一點(diǎn),電費(fèi)馬上繳!物業(yè)預(yù)付費(fèi)云平臺(tái),打通繳費(fèi) “最后米”

    水費(fèi)收取,管控,欠費(fèi)關(guān)閥; 房租物業(yè)費(fèi)收取,欠費(fèi)拉閘; 公共區(qū)域電費(fèi)分?jǐn)偸杖。?公共區(qū)域、變電所電表接入抄表、計(jì)量; 預(yù)付費(fèi)+建筑能耗、分類分項(xiàng)能源計(jì)量體化系統(tǒng); 物業(yè)/地產(chǎn)集團(tuán)集中財(cái)務(wù)管控,子物業(yè)單獨(dú)權(quán)限; 表計(jì)種類多樣,方便不同場景施
    的頭像 發(fā)表于 08-14 14:59 ?876次閱讀
    手機(jī)<b class='flag-5'>點(diǎn)</b><b class='flag-5'>一點(diǎn)</b>,電費(fèi)馬上繳!物業(yè)預(yù)付費(fèi)云平臺(tái),打通繳費(fèi) “最后<b class='flag-5'>一</b>米”

    手機(jī)點(diǎn)一點(diǎn)就復(fù)電!智能電表系統(tǒng)如何讓租房繳費(fèi)“零跑腿”?

    出租房智能電表系統(tǒng) 欠費(fèi)斷電 遠(yuǎn)程繳費(fèi)
    的頭像 發(fā)表于 07-03 13:49 ?2319次閱讀
    手機(jī)<b class='flag-5'>點(diǎn)</b><b class='flag-5'>一點(diǎn)</b>就復(fù)電!智能電表系統(tǒng)如何讓租房繳費(fèi)“零跑腿”?

    【經(jīng)驗(yàn)分享】玩轉(zhuǎn)FPGA串口通信:從“幻覺調(diào)試”到代碼解析

    FPGA開發(fā),思路先行!玩FPGA板子,讀代碼是基本功!尤其對(duì)從C語言轉(zhuǎn)戰(zhàn)FPGA的“寶貝們”來說,適應(yīng)流水線(pipeline)編程可能需要點(diǎn)時(shí)間。上篇點(diǎn)燈代碼解讀了基礎(chǔ),而如果能親手寫出串口通訊
    的頭像 發(fā)表于 06-05 08:05 ?1262次閱讀
    【經(jīng)驗(yàn)分享】玩轉(zhuǎn)FPGA串口通信:從“幻覺調(diào)試”到<b class='flag-5'>代碼</b>解析

    由反激電源引起的一點(diǎn)兒分析

    由反激電源引起的一點(diǎn)兒分析 開關(guān)電源分為,隔離與非隔離兩種形式,在這里主要談談隔離式開關(guān)電源的拓?fù)湫问?,隔離電源按照結(jié)構(gòu)形式不同,可分 為兩大類:正激式和反激式。反激式指在變壓器原邊導(dǎo)通時(shí)副邊截止
    發(fā)表于 05-27 16:52

    CW32模塊使用 MAX7219四合一點(diǎn)陣模塊

    四合一點(diǎn)陣顯示模塊采用MAX7219作為控制,它是種集成化的串行輸入/輸出共陰極顯示驅(qū)動(dòng)器,它連接微處理器與8位數(shù)字的7段數(shù)字LED顯示,也可以連接條線圖顯示器或者64個(gè)獨(dú)立的LED。其上包括個(gè)
    的頭像 發(fā)表于 05-12 16:04 ?1197次閱讀
    CW32模塊使用 MAX7219四合<b class='flag-5'>一點(diǎn)</b>陣模塊

    SlaveFifo 2bit sync模式下最大速度只有320Mbyte/s左右,還能更快一點(diǎn)嗎?

    也只有320Mbyte/s左右,還能更快一點(diǎn)嗎?怎么優(yōu)化。希望超過400MB/s。我只需要個(gè)讀,個(gè)寫線程即可。其他線程資源可以關(guān)閉掉該如何關(guān)閉。 是不是定要采用GPIF II那種
    發(fā)表于 05-06 14:36
    云龙县| 金堂县| 仁寿县| 峡江县| 柯坪县| 建宁县| 河曲县| 屯门区| 旌德县| 丹寨县| 温泉县| 健康| 阿城市| 星座| 马关县| 华池县| 公主岭市| 交口县| 张家口市| 弥勒县| 江阴市| 吐鲁番市| 金堂县| 垣曲县| 庆安县| 邛崃市| 麟游县| 英超| 汪清县| 龙门县| 教育| 延吉市| 崇信县| 武威市| 织金县| 永胜县| 兴城市| 德州市| 庆阳市| 象山县| 昭平县|