天天看点

编码规范

<b>1.1. </b><b>程序块要采用缩进风格编写,缩进的空格数</b><b>为</b><b>3</b><b>个</b><b>,缩进与</b><b>对齐</b><b>只使用空格键,不应使用Tab键</b><b>。</b>

说明:由开发工具自动生成的代码缩进格式允许不一致。

<b>1.2. </b><b>函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,</b><b>case</b><b>语句下的情况处理语句也要遵从语句缩进要求。</b>

<b>1.3. </b><b>在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如-</b><b>&gt;</b><b>),后不应加空格。</b>

说明:采用这种松散方式编写代码的目的是使代码更加清晰。

示例:

(1) 逗号、分号只在后面加空格。

int a, b, c;

(2)比较操作符, 赋值操作符"="、 "+=",算术操作符"+"、"%",逻辑操作符"&amp;&amp;"、"&amp;",位域操作符"&lt;&lt;"、"^"等双目操作符的前后加空格。

if (current_time &gt;= MAX_TIME_VALUE)

a = b + c;

a *= 2;

a = b ^ 2;

(3)"!"、"~"、"++"、"--"、"&amp;"(地址运算符)等单目操作符前后不加空格。

*p = 'a';        // 内容操作"*"与内容之间

flag = !isEmpty; // 非操作"!"与内容之间

p = &amp;mem;        // 地址操作"&amp;" 与内容之间

i++;             // "++","--"与内容之间

(4)"-&gt;"、"."前后不加空格。

p-&gt;id = pid;     // "-&gt;"指针前后不加空格

(5) if、for、while、switch等与后面的括号间应加空格,使if等关键字更为突出、明显。

正确写法:

        if (a &lt; 0)

{

       return;

}

        while(a &lt; 0)

       a++;

错误写法:

        if (a &lt; 0) return;

               a++;

<b>1.4. </b><b>一行程序以小于</b><b>80</b><b>字符为宜,不要写得过长。</b>

<b>2.注释</b>

<b>2.1. </b><b>函数头部应进行注释,列出:函数的目的</b><b>/</b><b>功能、输入参数、输出参数、返回值、调用关系(函数、表)等</b><b>。</b>

使用Doxygen的JavaDoc style来注释C++代码,下面是一个典型class的样例。详细可以阅读doxygen_manual-1.6.3.chm。

/**

 * A test class. A more elaborate class description.

 */

class Test

 public:

    /**

     * An enum.

     * More detailed enum description.

     */

    enum TEnum {

          TVal1, /**&lt; enum value TVal1. */ 

          TVal2, /**&lt; enum value TVal2. */ 

          TVal3 /**&lt; enum value TVal3. */ 

         }

       *enumPtr, /**&lt; enum pointer. Details. */

       enumVar; /**&lt; enum variable. Details. */

      /**

       * A constructor.

       * A more elaborate description of the constructor.

       */

      Test();

      /**

       * A destructor.

       * A more elaborate description of the destructor.

     ~Test();

       * a normal member taking two arguments and returning an integer value.

       * @param a an integer argument.

       * @param s a constant character pointer.

       * @see Test()

       * @see ~Test()

       * @see testMeToo()

       * @see publicVar()

       * @return The test results

       int testMe(int a,const char *s);

       * A pure virtual member.

       * @see testMe()

       * @param c1 the first argument.

       * @param c2 the second argument.

       virtual void testMeToo(char c1,char c2) = 0;

       * a public variable.

       * Details.

       int publicVar;

       * a function variable.

       int (*handler)(int a,int b);

};

<b> </b>

*

*/

中间的’*’可以省略:

通常的注释需包括的信息

/*************************************************

 Function:        // 函数名称

 Description:    // 函数功能、性能等的描述

 Calls:           // 被本函数调用的函数清单

 Called By:       // 调用本函数的函数清单

 Table Accessed: // 被访问的表(此项仅对于牵扯到数据库操作的程序)

 Table Updated: // 被修改的表(此项仅对于牵扯到数据库操作的程序)

 Input:           // 输入参数说明,包括每个参数的作

                    // 用、取值说明及参数间关系。

 Output:         // 对输出参数的说明。

 Return:         // 函数返回值的说明

 Others:         // 其它说明

*************************************************/

<b>2.2. </b><b>边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。</b>

<b>2.3. </b><b>应尽量避免使用全局变量,如果必须使用全局变量,则</b><b>全局变量要有较详细的注释</b>

<b>2.4. </b><b>如果你需要不归档的注释,在</b><b>Doxygen</b><b>的注释</b><b>/**</b><b>…</b><b>*/</b><b>以外,使用原来的注释即可:如</b><b>://</b><b>…。</b>

<b>3.标识符命名</b>

<b>3.1. </b><b>标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解,</b><b>避免使用单个字符作为变量名(如</b><b>i</b><b>、</b><b>j</b><b>、</b><b>k</b><b>,但</b><b>i</b><b>、</b><b>j</b><b>、</b><b>k</b><b>作局部循环变量是允许的)</b><b>。</b>

说明:较短的单词可通过去掉“元音”形成缩写;较长的单词可取单词的头几个字母形成缩写;一些单词有大家公认的缩写。

示例:如下单词的缩写能够被大家基本认可。

temp 可缩写为 tmp ;

flag 可缩写为 flg ;

statistic 可缩写为 stat ;

increment 可缩写为 inc ;

message 可缩写为 msg ;

<b>3.2. </b><b>基本类型前缀</b>

类型

前缀

例子

int

i

iVertexNum

bool

b

bVisible

long

l

lHandle

byte

byteFlag

char

c

cInputCharacter

unsigned int

ui

uiStartIndex

short

s

sMehtodID

usigned short

us

usIndex

WORD

w

wIndex

DWORD

dw

dwFlags

<b>3.3. </b><b>非基本类型前缀</b>

<b>特殊类型</b>

指针类型

p

pForm

数组类型

a

aNames

静态变量

s_

s_manager(此时如果是成员变量可以忽略非公有属性的下划线前缀规则)

<b>字符串类型前缀</b>

 std::string std::wstring

str

strName

 char*

pstr

pstrName

 char[] 数组

sz

szName

结构类型

class/struct

无前缀

enum

e

ePrimitiveType

 在别人的基础上修改而成

继续阅读