c++命名規范、代碼規范和參數設置


命名規范  

  在一個項目中,系統工程全部使用大寫字母,盡量避免使用下划線,如果使用,要保證下划線兩側字母大小寫一致,如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式的注釋

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM