zoukankan      html  css  js  c++  java
  • 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式的注释

     

  • 相关阅读:
    Myeclipse 找不到Convert to maven project选项
    myeclipse中disable maven nature
    运行Maven是报错:No goals have been specified for this build
    Maven 工程错误Failure to transfer org.codehaus.plexus:plexus-io:pom:1.0,Failure to transfer org.codehaus.plexus:plexus-archiver:jar:2.0.1
    -Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable and mvn script match.
    新建web工程Jdk怎么不是自己安装的, 是自带的
    AGC024B Backfront
    AGC037C Numbers on a Circle
    如何看待现在的教育?自己以后怎么做!!!!
    当局者迷
  • 原文地址:https://www.cnblogs.com/wangtianning1223/p/13330401.html
Copyright © 2011-2022 走看看