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式的注释

 

 

 

posted @ 2020-07-17 15:42  Wangtn  阅读(1797)  评论(0编辑  收藏  举报