91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

#和##寫出“秀”一點的代碼

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

掃碼添加小助手

加入工程師交流群

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

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

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

對于這兩個語法的功能都比較簡單,且都是在

預(yù)處理階段

做一些工作 :

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

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

沒點代碼似乎并不是那么形象 :

參考demo:

pYYBAGL0zluACYjNAADPq4hIo50851.png

輸出結(jié)果:

poYBAGL0zm2AVtyJAAAmcrg7hqI889.png

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

2、#的玩法

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

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

poYBAGL0zoGADIkhAADSeljeKRQ791.png

輸出結(jié)果:

poYBAGL0zpiAFJ5ZAAAtJvQj9fg944.png

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

poYBAGL0zqqAfcaQAACGvTONuOs330.png

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

poYBAGL0zrqAYk3ZAAAWu9H8nAY063.png

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

poYBAGL0zsuAKj0PAACb6YBeaEw850.png

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

poYBAGL0ztyAORLuAAAamuC2BLc556.png

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

3、##的玩法

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

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

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

poYBAGL0zvKAQ-U1AADbGFWhUxI580.png

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

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

pYYBAGL0zxWAdqXPAAHsk2LPMp4853.png

poYBAGL0zxuAed17AAALIYngyf0601.png

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


審核編輯:劉清

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

    關(guān)注

    183

    文章

    7644

    瀏覽量

    145607
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1314

    瀏覽量

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

    關(guān)注

    1

    文章

    596

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

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

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

    法拉電容一點電沒有還能用嗎為什么

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

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

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

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

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

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

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

    請問如何使用ICP編程工具寫出序列號?

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

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

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

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

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

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

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

    由反激電源引起的一點兒分析

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

    CW32模塊使用 MAX7219四合一點陣模塊

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

    AI智能體,是不是可以慢一點?ToB產(chǎn)業(yè)觀察

    Manus爆火之后,產(chǎn)品過度營銷曾使其度飽受業(yè)內(nèi)爭議——不自研大模型,而是基于第三方大模型進(jìn)行工程化包裝,實現(xiàn)通用AI智能體(Agent)的能力。在創(chuàng)始團(tuán)隊看來,極致的套殼就是種勝利
    的頭像 發(fā)表于 05-08 10:33 ?503次閱讀

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

    也只有320Mbyte/s左右,還能更快一點嗎?怎么優(yōu)化。希望超過400MB/s。我只需要個讀,個寫線程即可。其他線程資源可以關(guān)閉掉該如何關(guān)閉。 是不是定要采用GPIF II那種
    發(fā)表于 05-06 14:36

    開關(guān)電源的一點總結(jié)

    關(guān)于開關(guān)電源,其實沒有什么好寫的,或者說,已經(jīng)有很多專門寫開關(guān)電源的書,三言兩語也說不出什么來。但是以前有人問過我些問題,現(xiàn)在想起來,總結(jié)下。 1,開關(guān)電源的占空比 初學(xué)者總是不明白占空比跟輸入
    發(fā)表于 04-03 13:50