命名規范
在一個項目中,系統工程全部使用大寫字母,盡量避免使用下划線,如果使用,要保證下划線兩側字母大小寫一致,如PRE_PROCESS(預處理),如使用駝峰法命名,則不允許試用下划線,駝峰法指大小寫字母結合的命名方法,首字母用大寫,后面的用小寫,如PreProcess
命名時類型全部大寫,對應的變量采用駝峰法命名,較好區分,比如
IP_BASE IpBase;
RUN_PARAM RunParam;
CFG_PARAM CfgParam;
這樣就一目了然誰是類型誰是變量,項目中的規范數據類型(類似於系統參數)全部使用“大寫字母+下划線”的方法命名.
但是圖像的命名方法有時例外,有時圖像的命名表示特殊屬性,所以前面的全部使用大寫,但是不使用下划線,如
Mat SVImg;
Mat GRAYImg;
Mat RGBImg;
有時在變量名字前加上特定的小寫字母表示特定的含義,如
指針 pGRAYImg;
向量 vGRAYImg;
全局變量 gGRAYImg;
枚舉類型 eMatch;
在定義枚舉類型的時候要注意辨識度,比如簡單的使用"ETYPE"來命名,當我需要聲明枚舉變量時,鍵盤上敲一個“E”會瞬間彈出來很多系統變量,不利於編程。所以可以命名為“E_IT_TYPES”,當大廚E_IT時就會直接彈出來了,里面的枚舉類型也是同理。
函數的形參一般在前面加上i,如iImg
編碼規范
全局變量不可以和形參同名,否則會帶來混淆,編程者難以確定全局變量是否改變,是個坑
class demo{ public: Rect iRect; void func(Rect iRect) { iRect.x=1; iRect.y=2; } }
全局變量實際上沒有改變,但是容易帶來混淆。
if(flag==1) {} else
如果少寫個“=”,就會變成賦值,導致死循環,並且這個bug不好發現
if(flag=1) {} else
怎樣修改代碼才能使這個錯誤容易發現呢,將參數和常量反過來
if(1==flag) {} else
這樣寫錯了的話就變成了1=flag,編譯器就會直接報錯了
同樣,在做函數封裝時要寫好保護,比如彩色圖像轉灰度圖像之前要檢查圖像通道,獲取圖像時要檢測圖像是否為空,輸入輸出圖像的大小是否一致,圖像中像素點的閾值時候超過了255等等,並且每個保護都要用注釋注明其目的。
在調用函數時或者模塊時,沒吊用一個函數(模塊)都要做消息處理,這樣在debug時可以快速定位
當一個類中既有函數又有成員變量時,且函數調用自己的成員變量,那么函數不需要設置形參,在函數里面直接調用就可以了。當為類的成員變量做封裝時,將它們定義成私有類型,這樣別人在調用類的時候就無法訪問成員變量了,只能通過訪問類的函數來使用這些成員變量,可以通過定義固定的接口函數,來限制外界對這些成員變量的操作,如get(),set(),UpdateRunParam(),接口函數定義成公有類。
注釋規范
一頁代碼的頭部要注明文件名稱、功能描述、創建日期等信息,在函數模塊前要注明功能描述,輸入圖元,輸出圖元,輸入控制,輸出控制。IP層要采用halcon式的注釋