团队合作时对于函数名类名……的命名规范

C/C++源代码书写规范(试行)

  1. 在.h/.cpp的开头应有一段格式统一的说明,内容包括:

    • 文件名 (FileName);
    • 简短说明文件功能、用途 (Comment);
    • 创建人 (Creater);
    • 文件创建时间 (Date)。
     
    xxxxxxxxxx
    例:
    /**********/
    /**@file***/
    /**@brief**/
    /**@author*/
    /**@date***/
    /**********/
  2. 除非极其简单,否则对函数应有注释说明。内容包括:功能、入口/出口参数,必要时还可有备注或补充说明。

  3. 每行代码的长度推荐为80列,最长不得超过120列;折行以对齐为准。

    •  
      xxxxxxxxxx
      例:
          HANDLE CSOpenFile(const char cszFileName[],
                          int nMode);
          或者:
          BOOL CSReadFile(
                          HANDLE hFile,
                          void *pvBuffer,
                          int nReadSize,
                          int *pnReadSize
                          );
                          
  4. 循环、分支代码,判断条件与执行代码不得在同一行上。

    •  
      xxxxxxxxxx
      例:正确:
          if (n == -2)
              n = 1;
          else
              n = 2;
          不得写做:
          if (n == -2) n = 1;
          else n = 2;
  5. 指针的定义,* 号既可以紧接类型,也可以在变量名之前。

    •  
      xxxxxxxxxx
      例:
          可写做:int* pnsize;
          也可写做:int *pnsize;
          但不得写做:int * pnsize;
  6. 在类的成员函数内调用非成员函数时,在非成员函数名前必须加上“::”。

  7. 函数入口参数有缺省值时,应注释说明。

    •  
      xxxxxxxxxx
      :
      BOOL KSSaveToFile(const char cszFileName[],BOOL bCanReplace /* = TRUE */);
  8. else if 必须写在一行。

  9. 与‘{’、‘}’有关的各项规定:

    1. ‘{’‘}’应独占一行,在该行内可有注释(如果没有独占一行,那么它的下一行必须是个空行(空行上可以放注释),‘{’前必须有一个空格

      •  
        xxxxxxxxxx
        例:正确:
            for (i = 0; i < cbLine; i++)
            { // .....
                printf("Line %d:", i);
                printf("%s\n", pFileLines);
            }
            for (i = 0; i < cbLine; i++) {
                // .....
                printf("Line %d:", i);
                printf("%s\n", pFileLines);
            }
            不得写做:
            for (i = 0; i < cb; i++)
            {printf("Line %d:", i);
            printf("%s\n", pFileLines);}
    2. ‘{’之后的代码必须缩进一个Tab。‘{’与‘}’必须在同一列上。

      •  
        xxxxxxxxxx
        例:正确:
            if (i > 0) {
                m = 1;
                n++;
            }
            不得写做:
            if (i > 0) {
            m = 1;
            n++;
            }
            例外:
            if (i == 0)
            { ASSERT(FALSE); return; }
    3. 在循环、分支之后若只有一行代码,虽然可省略‘{’、‘}’,但不推荐这么做。若省略后可能引起歧义,则必须加上‘{’、‘}’。

  10. 与空格有关的各项规定。

    1. 在所有两目、三目运算符的两边都必须有空格。在单目运算符两端不必空格。但在‘->’、‘::’、‘.’、‘[’、‘]’等运算符前后,及‘&’(取地址)、‘*’(取值)等运算符之后不得有空格。

      •  
        xxxxxxxxxx
        例:正确:
            int n = 0, nTemp;
            for (int i = nMinLine; i <= nMaxLine; i++)
            不得写做:
            int n=0, nTemp;
            for ( int i=nMinLine; i<=nMaxLine; i++ )
    2. for、while、if 等关键词之后应有1个空格,再接‘(’,之后无空格;在结尾的‘)’前不得有空格。

      •  
        xxxxxxxxxx
        例:正确:
            if (-2 == n)
            不得写做:
            if(-2 == n)
            
            if ( -2 == n )
    3. 调用函数、宏时,‘(’、‘)’前后不得有空格。

      •  
        xxxxxxxxxx
        例:正确:
            printf("%d\n", nIndex);
            不得写做:
            printf ("%d\n", nIndex);
            printf( "%d\n", nIndex );
    4. 类型强制转换时,‘(’‘)’前后不得有空格

      •  
        xxxxxxxxxx
        例:可写做:
            (KSFile*)pFile;
            也可写做:
            (KSFile *)pFile
            不得写做:
            ( KSFile* )pFile
            ( KSFile * ) pFile
  11. 与缩进有关的各项规定

    1. 缩进以 Tab 为单位。1 个 Tab 为 4 个空格

    2. 下列情况,代码缩进一个 Tab:

      1. 函数体相对函数名及‘{’、‘}’。

        •  
          xxxxxxxxxx
          例:
              int Power(int x)
              {
                return (x * x);
              }
      2. if、else、for、while、do 等之后的代码。

      3. 一行之内写不下,折行之后的代码,应在合理的位置进行折行。若有 + - * / 等运算符,则运算符应在上一行末尾,而不应在下一行的行首。

    3. 下列情况,不必缩进:switch 之后的 case、default。

      •  
        xxxxxxxxxx
        例:
            switch (nID)
            {
            case ID_PLAY:
              ......
              break;
            case ID_STOP:
              ......
              break;
            default:
              ......
              break;
            } 
            

命名规范的整体原则:


常见命名法:


工程名:

文件名:

类/结构


函数


变量

作用域前缀说明

前缀说明
局部变量
m_类的成员变量(member)
sm_类的静态成员变量(static member)
s_静态变量(static)
g_外部全局变量(global)
sg_静态全局变量(static global)
gg_进程间共享的共享数据段全局变量(global global)

类型前缀说明

前缀说明
n整型和位域变量(number)
e枚举型变量(enumeration)
c字符型变量(char)
b布尔型变量(bool)
f浮点型变量(float)
u无符号(unsigned)
p指针型变量和迭代子(pointer)
lp长指针型变量和迭代子(long pointer)
pfn特别针对指向函数的指针变量和函数对象指针(pointer of function)
g数组(grid)
str字符串(string)
i类的实例(instance)
对于经常用到的类,也可以定义一些专门的前缀,
如:std::string和std::wstring类的前缀可以定义为"st"
std::vector类的前缀可以定义为"v"等等。

常量

枚举、联合、typedef

宏、枚举值


通用缩写表

  1. 本缩写表是“编码命名规范”的附录。
  2. 本缩写表中列出的都是通用性缩写,不提供标准缩写,如:Win9x,COM等。
  3. 使用本缩写表里的缩写时,请对其进行必要的注释说明。
  4. 除少数情况以外,大部分缩写与大小写无关。
缩写全称
addrAddress
admAdministrator
appApplication
argArgument
asmassemble
asynasnychronization
avgaverage
DBDatabase
bkback
bmpbitmap
btnButton
bufBuffer
calcCalculate
charCharacter
chgChange
clkClick
clrcolor
cmdCommand
cmpCompare
colColumn
coordcoordinates
cpycopy
ctl/ctrlControl
curCurrent
cylCylinder
dbgDebug
dblDouble
decDecrease
defdefault
delDelete
dest/dstDestination
devDevice
dictdictionary
diffdifferent
dirdirectory
dispDosplay
divDivide
dlgDialog
docDocument
drvDriver
dynaDynamic
envEnvironment
errerror
ex/extExtend
execexecute
flgflag
frmFrame
func/fnFunction
grpgroup
horzHorzontal
idx/ndxIndex
imgImage
implImplement
incIncrease
infoInformation
initInitial / Initialize / Initializatioin
insInsert
instInstance
INT / intrInterrupt
lenLength
libLibrary
lnkLink
loglogical
lstList
maxmaximum
memMemory
mgr / manManege / Manager
midmiddle
minminimum
msgMessage
mulMultiply
numNumber
objObject
ofsOffset
orgOrigin / Original
paramParameter
picpicture
pkgpackage
pnt / ptPoint
posPosition
pre / prevprevious
prgprogram
procProcess / Procedure
propProperties
pswPassword
ptrPointer
pubPublic
rcrect
refReference
regRegister
reqrequest
resResource
retreturn
rgnregion
scrscreen
secSecond
segSegment
selSelect
srcSource
stdStandard
stgStorage
stmStream
strString
sunSubtract
sumsummation
svrServer
syncSynchronization
sysSystem
tblTable
temp / tmpTemporary
tran / transtranslate / transation / transparent
tstTest
txttext
unkUnknown
updUpdate
upgUpgrade
utilUtility
varVariable
verVersion
vertVertical
virVirus
wndWindow

未完结

参考:

ggjucheng 静默虚空 zxysilently.