日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > 大魚機(jī)器人
[導(dǎo)讀]不只女人要保養(yǎng),代碼也是如此。面向?qū)ο缶幊?,就是把面對的代碼當(dāng)作對象一樣,定期對其進(jìn)行保養(yǎng)。

不只女人要保養(yǎng),代碼也是如此。面向?qū)ο缶幊?,就是把面對的代碼當(dāng)作對象一樣,定期對其進(jìn)行保養(yǎng)。

目錄

一、美顏 Astyle+Source Insight

二、祛痘 cppCheck

三、返老還童 git

四、工欲善其事必先利其器

一、美顏 Astyle+Source Insight

1.1真假小龍女的問題

都說秀色可餐,同樣的角色,都是小龍女,但是效果不一樣。實(shí)現(xiàn)同樣的功能,有的代碼一目了然,像詩一樣賞心悅目;有的卻像SHI一樣,如下面的代碼,雖然功能正常,但看起來什么感覺?

//C語言混亂大賽作品
#include?
main(int?t,int?_,char*?a)
{
????return?!03?main(-79,-13,a+main(-87,1-_,?
main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13??
main(2,_+1,"%s?%d?%d\n"):9:16:t<0?t<-72?main(_,t,?
"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#;#q#n+,/+k#;*+,/'r?:'d*'3,}{w+K?w'K:'+}e#';dq#'l?q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw'?i;#?){nl]!/n{n#';?r{#w'r?nc{nl]'/#{l,+'K?{rw'?iK{;[{nl]'/w#q#n'wk?nw'?iwk{KK{nl]!/w{%'l##w#'?i;?:{nl]'/*{q#'ld;r'}{nlwb!/*de}'c?;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w!?nr'/?')?}+}{rl#'{n'?')#?}'+}##(!!/")?
:t<-50?_==*a?putchar(a[31]):main(-65,_,a+1):main((*a=='/')+t,_,a+1)?
:02,2,"%s"):*a=='/'||main(0,main(-61,*a,?
"!ek;dc?i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m?.vpbks,fxntdCeghiry"),a+1);
}

正如女人愛美一樣,出門必化妝,拍照必美顏;代碼也是需要美顏妝扮,除非你期望后來接手者在心中的十萬個詛咒,這TM誰寫的?尤其對嵌入式系統(tǒng)產(chǎn)品,升級維護(hù)周期長,軟件的可讀性就顯得更加重要;代碼規(guī)范對后續(xù)維護(hù)升級是大有裨益的。

1.2 代碼格式化

一般公司不缺編碼規(guī)范,缺的是執(zhí)行。小項目單人完成,編碼風(fēng)格隨心所欲;大項目團(tuán)隊完成,編碼風(fēng)格各不相同。目前來說,個人只發(fā)現(xiàn)go語言是編譯時強(qiáng)制格式化,其他語言編譯時,不檢查排版格式。對于編碼規(guī)范,不能依靠個人主觀,強(qiáng)推工具自動實(shí)現(xiàn)才能提高執(zhí)行力。

不管編碼使用Keil/MDK、Qt等集成工具,或者純粹的代碼編輯工具Source Insight,一般都支持自定義運(yùn)行可執(zhí)行文件,如Astyle??梢钥椭苹虏藛?,一鍵執(zhí)行Astyle,將代碼一鍵格式化,排版統(tǒng)一、層次分明。

Astyle官網(wǎng) http://astyle.sourceforge.net/ ?按要求下載安裝,只需要AStyle.exe即可。關(guān)于其使用和參數(shù),可以在進(jìn)入Documentation。對代碼基本風(fēng)格,{}如何對齊、是否換行,switch-case如何排版,tab鍵占位寬度,運(yùn)算符或變量前后的空格等等,基本上代碼排版涉及的方方面面都有參數(shù)說明。個人選擇的編碼參數(shù)是

--style=allman?-S?-U?-t?-n?-K?-p?-s4?-j?-q?-Y?-xW?-xV?fileName

效果如下

int?Foo(bool?isBar)
{
????if?(isBar)
????{
????????bar();
????????return?1;
????}
????else
????{
????????return?0;
????}
}

建議先參考文檔逐個熟悉作用,確認(rèn)參數(shù),然后集成到編輯工具,以Source Insight為例。

1、在選項或者工具下(不同Source Insight版本不同)打開“自定義命令”,添加命令和運(yùn)行。2、選擇正確的路徑,結(jié)合前面的參數(shù)類型,最后必須加上 %f,表示對該文件執(zhí)行,

C:\AStyle.exe --style=allman -S -U -t -n -K -p -s4 -j -q -Y -xW -xV ?%f

3、將該命令插入到編輯菜單,后續(xù)在編輯欄點(diǎn)擊Astyle,即可對當(dāng)前文件自動進(jìn)行格式化排版。

1.3 高級配置

前面只是Source Insight的基礎(chǔ)擴(kuò)展,下面簡要說明下高級擴(kuò)展宏功能,本文只是描述下基本流程。1、配置菜單2、插入之后,在主菜單欄會出現(xiàn)“工作”的菜單,點(diǎn)擊Insertifdef,彈出如下對話框3、確定之后自動在光標(biāo)處插入代碼

#if?defined?(ABCD)

#endif?/*?ABCD?*/

4、不止是支持插入if defined ,還包括插入文件頭,對h文件插入避免多次包含的宏,對函數(shù)插入注釋,以及自動添加編輯時間、作者名稱等。這些宏配置和前面一樣,至于客制化,比如函數(shù)注釋的內(nèi)容、格式等,也是可以自由定義。5、配置路徑如下先關(guān)閉全部Source Insight工程,再打開Base.PR,編輯utils.em。如前面的宏 Insertifdef就是如下的代碼

macro?InsertIfdef()
{
?sz?=?Ask("Enter?ifdef?condition:")
?if?(sz?!=?"")
??IfdefSz(sz);
}

//?Wrap?ifdef??..?endif?around?the?current?selection
macro?IfdefSz(sz)
{
?hwnd?=?GetCurrentWnd()
?lnFirst?=?GetWndSelLnFirst(hwnd)
?lnLast?=?GetWndSelLnLast(hwnd)
??
?hbuf?=?GetCurrentBuf()
?InsBufLine(hbuf,?lnFirst,?"#if?defined?(@sz@)")
?InsBufLine(hbuf,?lnLast+2,?"#endif?/*?@sz@?*/")
}

如Ask就是彈出提示語,sz獲取輸入的內(nèi)容,再InsBufLine插入兩行代碼。而這些接口的使用說明,只要打開Source Insight的幫助即可查看。Ask說明:例如插入函數(shù)注釋的代碼如下:

?szInf?=?Ask("你為什么要編寫這個函數(shù):")
?szDescription?=?Ask("請輸入函數(shù)的使用注意事項和算法實(shí)現(xiàn):")?
?//?begin?assembling?the?title?string
?sz?=?"/******************************************************************************"
?InsBufLine(hbuf,?ln,?sz)
?InsBufLine(hbuf,?ln?+?1,?"?*??Function????-??@szFunc@")
?InsBufLine(hbuf,?ln?+?2,?"?*?")
?InsBufLine(hbuf,?ln?+?3,?"?*??Purpose?????-??@szInf@")
?InsBufLine(hbuf,?ln?+?4,?"?*?")?
?InsBufLine(hbuf,?ln?+?5,?"?*??Description?-??@szDescription@")
?InsBufLine(hbuf,?ln?+?6,?"?*?")
?InsBufLine(hbuf,?ln?+?7,?"?*?modification?history")
?InsBufLine(hbuf,?ln?+?8,?"?*?----------------------------------------")
?InsBufLine(hbuf,?ln?+?9,?"?*?v1.0??,?@szDay@-@szMonth@-@Year@,??@szMyName@??written")
?InsBufLine(hbuf,?ln?+?10,?"?*?----------------------------------------")
?InsBufLine(hbuf,?ln?+?11,?"?******************************************************************************/")

最終自動插入的函數(shù)注釋顯示效果如下:

/******************************************************************************
?*??Function????-??[myFunction]
?*
?*??Purpose?????-
?*
?*??Description?-??[函數(shù)的功能]
?*
?*??modification?history
?*?----------------------------------------
?*?v1.0??,?22-11-2020,??embedded-system??written???[時間格式可自由設(shè)定]
?*?----------------------------------------
*******************************************************************************/

6、其他宏也是這樣,可以自由配置,當(dāng)然,開啟這個功能的第一步是先編輯,替換全部szMyName為自己的名字。有一點(diǎn)需要注意的是插入函數(shù)注釋時,光標(biāo)必須在該函數(shù)第一個{內(nèi),否則無法獲取函數(shù)名,會提示錯誤。

1.4 總結(jié)

Source Insight集成Astyle自動排版,統(tǒng)一風(fēng)格;集成宏定義,統(tǒng)一注釋格式、提高效率。

二、祛痘 cppCheck

2.1 祛痘除隱患

依靠美顏可以掩蓋面部瑕疵,如痘痘,但為了極致,應(yīng)該從根源祛痘,素顏就美,淡妝濃抹總相宜。代碼規(guī)范整齊,還要沒有隱患,大部分開發(fā)人員都對警告視而不見,覺得隱患沒啥大問題,同樣的美女,若是一臉痘痘,顏值瞬間下降。代碼也是如此,編譯警告如同痘痘,看起來不礙事,實(shí)際對代碼的質(zhì)量和后期維護(hù)都是隱患,要培養(yǎng)習(xí)慣,凡是警告都要消滅的習(xí)慣。

另外對于編碼規(guī)范,不只是排版布局,還有命名規(guī)范,例如宏定義使用小寫字母,就必須指出要求修改。所以,代碼必須經(jīng)過祛痘,除去小隱患,嚴(yán)苛的要求,造就趨于完美的代碼。但是,依靠人工檢查效率低下,靜態(tài)掃描順便檢查命名規(guī)范的神器應(yīng)運(yùn)而生。

代碼的靜態(tài)檢測工具有很多,為什么推薦cppCheck?因?yàn)樗荙t實(shí)現(xiàn)且開源。作為嵌入式軟件開發(fā),Qt可以錦上添花,它本身可以多平臺運(yùn)行,平時使用它開發(fā)小工具,模擬驗(yàn)證部分代碼,比起在真機(jī)編譯下載調(diào)試快捷方便。

cppCheck官網(wǎng)http://cppcheck.net/,可以下載執(zhí)行文件和源碼,稍微有Qt基礎(chǔ)的,可以下載源碼,其Qt工程如下,可以根據(jù)自身要求和能力,進(jìn)行二次開發(fā)。實(shí)現(xiàn)代碼自動格式化和靜態(tài)分析,可以有效規(guī)避軟件風(fēng)險?;陂_源的Cppcheck,集成Astyle,結(jié)合實(shí)際開發(fā)平臺和編碼標(biāo)準(zhǔn),使用Qt集成的codeCheck誕生了。

codeCheck執(zhí)行的流程,先將C語言代碼自動格式化,按指定的規(guī)則排版對齊,調(diào)整代碼間空格和間距,特殊語句強(qiáng)制換行或添加括號等,簡單操作即可完成代碼格式統(tǒng)一化(也就是上一章的配置參數(shù))。然后拆分代碼字符,建立token數(shù)據(jù)庫,按預(yù)置的規(guī)則分析代碼是否存在匹配的非法代碼,并直觀顯示風(fēng)險代碼位置以便跟蹤修復(fù)。codeCheck不具備編譯語法分析,因此導(dǎo)入的文件必先確保編譯正常,再進(jìn)行分析才有意義。

針對實(shí)際開發(fā)中的問題點(diǎn),比如變量命名沖突,或者關(guān)鍵變量缺少注釋導(dǎo)致維護(hù)升級困難,特別增加了個性化掃描標(biāo)準(zhǔn)。由于個人時間和水平有限,工具還存在優(yōu)化改進(jìn)的必要,但基本可滿足常規(guī)應(yīng)用和新人培養(yǎng)。

即使沒有Qt基礎(chǔ),直接使用開源版本,也是相當(dāng)給力的,二次開發(fā)只是錦上添花而已。

2.2 代碼掃描與靜態(tài)分析

個人二次開發(fā)后的主界面如下,和原始的cppcheck差不多,只是多了命名規(guī)范檢查(全局變量必須g_開頭,帶注釋;宏定義、枚舉值禁止包含小寫字母等)。“分析”導(dǎo)入文件或文件夾后,即可啟動自動格式化并分析代碼邏輯,顯示結(jié)果如下:選擇“分析結(jié)果”欄,則顯示掃描出的風(fēng)險代碼,標(biāo)明風(fēng)險類型和代碼位置,具體顯示如下圖。

2.3 源碼分析

非cppcheck源碼,二次開發(fā)的代碼片段。

void?CheckThread::run()??//運(yùn)行掃描,這里是入口
{
?/**/
????QString?file?=?mResult.getNextFile();
????while?(!file.isEmpty()?&&?mState?==?Running)?
????{
????????qDebug()?<"format?file"?<????????file_format(file);//添加Astyle命令
????????mCppcheck.check(file.toStdString());
?????/**/
?????}
?????/**/
//astyle.exe?v3.1??添加代碼格式化
void?CheckThread::file_format(const?QString?file)
{
????QProcess?builder;
????QStringList?param;

????param<<"--style=allman"<<"-S"<<"-U"<<"-t"<<"-n"<<"-K"<<"-p"<<"-s4"<<"-j"<<"-q"\
????????<<"-Y"<<"-xW"<<"-xV"<
????if(file.endsWith(".c",Qt::CaseSensitive)||file.endsWith(".cpp",Qt::CaseSensitive)\
???????||file.endsWith(".h",Qt::CaseSensitive))
????{
????????builder.start("codeFormat.exe",param);
????????builder.waitForFinished();
????}
}

2.4 總結(jié)

實(shí)現(xiàn)代碼自動格式化和靜態(tài)分析,可以有效規(guī)避軟件風(fēng)險。關(guān)注微信公眾號【嵌入式系統(tǒng)】,可以獲取codeCheck源碼。

三、返老還童 git

3.1 月光寶盒

愛情不可期,往事成追憶。至尊寶可以使用月光寶盒穿越時空去尋找愛情。對于女人,擁有月光寶盒,即使容顏衰老,也可以回到過去,返老還童,永葆青春。

對于程序員,一份完美的代碼,修修補(bǔ)補(bǔ),幾經(jīng)折騰終于封板;因?yàn)楸4娌簧苹蛘咝薷挠涗泚G失,那種痛苦也是一般人無法想象的。為了不會有失去才后悔莫急的痛楚,必須使用版本控制來追溯代碼的過去,程序員的月光寶盒就是Git神器。

3.2 版本控制git

不必說你有多聰明,每天拷貝一份代碼加描述備份;也不要說以往的svn等工具有多先進(jìn);這些工具在git的分布式軟件版本控制面前,都不值一提,雖然Git也有缺點(diǎn),但是依然不能掩蓋它的光芒。

十年來,一直是嵌入式軟件開發(fā),80%的時間使用windows版的git可視化操作,相比命令行,更容易掌握與使用,查看版本記錄也更加直觀,命令行的操作方式不在本文考慮范圍。git官網(wǎng)https://git-scm.com/。

1、安裝TortoiseGit-2.5.0.0-64bit.msi 一路下一步,這只是安裝了git的內(nèi)核功能,要在windows下操作,需要安裝界面外殼。

2、安裝GitExtensions-2.50.02-SetupComplete.msi ? 或者 ?Git-2.15.0-64-bit.exe,這是兩種風(fēng)格的界面,主體功能差不多,個人選擇的是后者。也可以兩個都安裝。

3、安裝過程中出現(xiàn)較多的配置,所有選項中,全部都選帶windows關(guān)鍵字的,否則用起來看不出問題,但是保存的記錄異常。

既然是界面操作,就開啟鼠標(biāo)右鍵的快捷圖標(biāo)。后續(xù)一些安裝選項,全部選帶windows關(guān)鍵字的。4、安裝完成后,鼠標(biāo)右鍵,會出現(xiàn) Git GUI Here。5、如果是新手可安裝漢化補(bǔ)丁TortoiseGit-LanguagePack-2.5.0.0-64bit-zh_CN.msi,建議不要安裝,翻譯有點(diǎn)搞笑(rebase-變基)。

3.3 基礎(chǔ)演示

1、配置2、創(chuàng)建本地版本庫,git creat repository here,默認(rèn)操作,即可創(chuàng)建版本,會在test空文件夾下生成.git 。?

3、在test下隨便改動,如新加123.txt,提交改動。此時鼠標(biāo)右鍵4、保存本次修改后,使用Git GUI Here->Repository->Visualize master's History查看全部版本記錄。5、通用配置和常用功能

3.4 總結(jié)

Git的使用尤其是多人合作,注意以下幾點(diǎn):

1、推送服務(wù)器前先同步;

2、2個分支版本有沖突,先rebase解決;熟練操作前不要使用merge;

3、版本節(jié)點(diǎn)不能使用中文,修改描述可以;

4、編譯自動生成的不要提交,可以使用TortoiseGit-->Delete and add in ignore list,濾指定的文件,即使有改動也不提交;

5、Git自帶的比較工具比較差,可以配置使用外部比較工具。一共三處,將Diff viewer和Merge Tool改為HA-BCompare。這個工具的比較功能強(qiáng)大,顯示界面清晰。

四、工欲善其事必先利其器

工欲善其事必先利其器,工具的熟練掌握、合理利用。代碼規(guī)范化,靜態(tài)掃描排除風(fēng)險,修改記錄保存完整,如此,才能保證代碼的質(zhì)量。


-END-

|?整理文章為傳播相關(guān)技術(shù),版權(quán)歸原作者所有?|
|?如有侵權(quán),請聯(lián)系刪除?|

往期好文合集


嵌入式牛人 | 這些單片機(jī)編程思想超硬核

嵌入式大佬 | 嵌入式C語言知識點(diǎn)萬字總結(jié)

嵌入式必會!C語言最常用的貪心算法就這么被攻略了

??最 后 ??
?

若覺得文章不錯,轉(zhuǎn)發(fā)分享,也是我們繼續(xù)更新的動力。
5T資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,PCB、FPGA、DSP、labview、單片機(jī)、等等!
在公眾號內(nèi)回復(fù)「更多資源」,即可免費(fèi)獲取,期待你的關(guān)注~

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護(hù)是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機(jī)驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機(jī)驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉