C++代码规范之定名

    添加时间:2013-7-12 点击量:

    C++代码规范之定名


    一、定名的两个基起原根蒂根基则


    1、含义清楚,不易混合;


    2、不和其它模块、体系API的定名空间相冲突。


     


    二、定名公例


    1、在所有定名中,都应应用标准的英文单词或缩写;不得应用拼音或拼音缩写,除非该名字描述的是文


        特有的内容(如半角、全角、声母、韵母等);除非须要,不要用数字或较新鲜的字符来定义标识符。


    2、所有定名都应遵守达意原则,即名称应含义清楚、明白。


    3、所有定名都不易过长,应把握在规定的最大长度以内。


    4、所有定名都应尽量应用全称。


    5、定名中若应用特别商定或缩写,则要有注释申明。 


    6、本身特有的定名风格,要自始至终对峙一致,不成往返变更。


       申明:小我的定名风格,在合适地点项目组或产品组的定名规矩的前提下,才可应用。(即定名规矩中没有规定到的处所才可有小我定名风格)。


    7、在同一软件产品内,应规划好接口项目组标识符(变量、布局、函数及常量)的定名,防止编译、链接时产生冲突。


    8、对于变量定名,禁止取单个字符(如i、j、k...),建议除了要有具体含义外,还能注解其变量类型、数据类型等,但i、j、k作局部轮回变量是容许的。


       申明:变量,尤其是局部变量,若是用单个字符默示,很轻易敲错(如i写成j),而编译时又搜检不出来,有可能为了这个小小的错误而花费多量的查错时候。


         例:下面所示的局部变量名的定义办法可以鉴戒。


            int liv_Width


         其变量名申明如下:


             l      局部变量(Local)  (其它:g    全局变量(Global)...)


             i      数据类型(Interger)


             v      变量(Variable)   (其它:c    常量(Const)...)


             Width  变量含义


         如许可以防止局部变量与全局变量重名。


    9、定名规范必须与所应用的体系风格对峙一致,并在同一项目中同一,比如采取UNIX的全小写加下划线的风格或大小写混排的体式格式,不要应用大小写与下划线混排的             体式格式,用作特别标识如标识成员变量或全局变量的m_和g_,厥后加上大小写混排的体式格式是容许的。


        例: Add_User不容许,add_user、AddUser、m_AddUser容许。


    10、用正确的反义词组定名具有互斥意义的变量或相作的函数等。


        申明:下面是一些在软件中常用的反义词组。


              add / remove      begin / end      create / destroy        /


              first / last      get / release    increment / decrement   put / get


              add /       lock / unlock    open / close            min / max


              old / new         start / stop     next / previous         source / target


              show / hide       send / receive   up / down    cut / paste


           例:


            int  min_sum;


            int  max_sum;


            int  add_user( BYTE user_name );


            int  _user( BYTE user_name );


    11、除了编译开关/头文件等特别应用,应避免应用_EXAMPLE_TEST_之类以下划线开端和结尾的定义。


    12、法度中不要呈现标识符完全雷同的局部变量和全局变量,尽管两者的感化域不合而不会产生语法错误,但会使人误会。


     


    三、具体规范


    1、名


         不强迫同一。


    2、文件名:


         基于名,开首3个字母应注解与哪一个相干。


         后面的字母应可以或许差别不合的功能。


         不区分大小写。


         长度不限于8.3格局,建议不久不多于30个字符。


         若文件用于定义和实现类,建议文件名与类名对峙一致。


    3、函数名:


         参照 Windows API 的定名规范。


         推荐应用动宾布局。函数名应清楚反应函数的功能、用处。


         函数名最长不得跨越30个字符。


         函数名第一个字母必须大写。


         全局函数必须以小写前缀g开首。全局函数的名字该当应用“动词”或者“动词+名词”(动宾词组)。类的成员函数该当只应用“动词”,被省略掉的名词就是对象    本身。


       例:


                     DrawBox(); // 全局函数
                     box->Draw(); // 类的成员函数


    4、变量名:


         原则上,变量名的定名遵从匈牙利记法。即:前缀 + 类型 + 变量名


         变量名最长不得跨越20个字符。


         变量的名字该当应用“名词”或者“形容词+名词”。


       例:


                  float value;
                  float oldValue;


          1)格局:[m_|s_|g_] type [class name|struct name] variable name


              2)申明:


                   m_ : 类的成员变量


                  ms_:类的静态成员变量


                  s_ :静态全局变量


                  g_ :通俗全局变量


                  类型缩写(type)


                  char, TCHAR: ch


                  char[],TCHAR[]: sz


                  bool, BOOL: b


                  int, __int16,__int32,__int64: n


                  long: l


                  double: d


                  float: ft


                  BYTE: by


                  WORD: w


                  DWORD: dw


                  unsigned: u


                  function: fn


                  p :pointer


                  lp :pointer


    5、类名:


           必须以大写K开首,后面字母反应具体含义,以清楚表达类的用处和功能为原则。


           接口必须以大写I开首,代表 Interface 。


           当名称由多个单词构成时,每一个单词的第一个字母必须大写。


    6、布局名、宏名、列举名、结合名:


           全部大写。


           列举名加小写前缀enum。


           例:


                         typedef enum _KFILE_OPEN_MODE


                        {


                             enumOPEN_READONLY = 0;


                             enumOPEN_READWRITE = 1;


                             enumCREATE_ALWAY = 3 ;


                         } KFILE_OPEN_MODE;


             宏名加小写前缀def。


             例:


                          #define defMAXNUMBER 100


           布局名加小写前缀tag,之后必须以大写K开首。


             例:


                           typedef struct tagKPOINT


                           {


                                 int x;


                                 int y;


                            } KPOINT;


              结合名加小写前缀uni。


              例:


                          typedef union _VARIANT


                         {


                              char unichVal;


                              int uninVal;


                              long unilVal;


                              float uniftVal;


                         } VARIANT;


       申明:对接口项目组的标识符应当有更严格限制,防止冲突。如可规定接口项目组的变量与常量之前加上  “模块”标识等。


       申明:应当在源文件的开端之处,对文件中所应用的缩写或商定,希罕是特别的缩写,进行须要的注释申明。


       申明:较短的单词可通畴昔掉“元音”形成缩写;较长的单词可取单词的头几个字母形成缩写。


             一些单词有大师公认的缩写。


              例:temp 可缩写为 tmp


                   flag 可缩写为 flg


                   statistic 可缩写为 stat


                   increment 可缩写为 inc


                   message 可缩写为 msg

    我俩之间有着强烈的吸引力。短短几个小时后,我俩已经明白:我们的心是一个整体的两半,我俩的心灵是孪生兄妹,是知己。她让我感到更有活力,更完美,更幸福。即使她不在我身边,我依然还是感到幸福,因为她总是以这样或者那样的方式出现在我心头。——恩里克·巴里奥斯《爱的文明》
    分享到: