C++的命名规范

来源:互联网 发布:人工智能与设计的未来 编辑:程序博客网 时间:2024/04/29 04:04


关于编成规范-命名规则的浅谈 
  
本命名取自“匈牙利”法,仅供参考。 
  
数据类型的命名规则参考: 
定义类型: 
前缀 类型                    类型描述            示例                   占字节(Win32) 有效值                 取值范围 
b    Boolena-布尔            1Bit的标志          bool           bFlag            4    (TRUE/FALSE)           (0x0 ~0x1) 
          /* typedef int bool */ 
------------------------------------------------------------------------------------- 
by   Byte 字节               无符号的8bit字节    unsigned char  byValue;         1    0   ~255               (0x0 ~0xFF) 
ch   Char 字符               有符号的8bit字节    signed   char  chValue;         1    -128~127               (0x80~0x7F) 
------------------------------------------------------------------------------------- 
w    不带符号的Word字        无符号的16bit整数   unsigned short wValue;          2    0     ~65535           (0x0   ~0xFFFF) 
sw   带符号的16位整形数      有符号的16bit整数   signed   short swValue;         2    -32768~32767           (0x8000~0x7FFF) 
------------------------------------------------------------------------------------- 
dw   不带符号的doubleword字  无符号的32bit整数   unsigned int   dwValue;         4    0          ~4294967295  (0x0       ~0xFFFFFFFF) 
n    带符号的32位整形数      有符号的32bit整数   signed   int   nValue;          4    -2147483648~2147483647  (0x80000000~0x7FFFFFFF) 
------------------------------------------------------------------------------------- 
f    单精度浮点数            单精度浮点数        float          fValue;          4 
d    双精度浮点数            双精度浮点数        double         dValue;          8 
------------------------------------------------------------------------------------- 
p    指针(pointer)           指针                char           *pchName;        4 
pc   const指针(pointer)      const指针           const char     *pcchName;       / 
          /* unsigned char *pbyData; /  unsigned short *pwData;  */ 
          /* const int *pcnData;     /  unsigned int *pdwData;   */ 
------------------------------------------------------------------------------------- 
t    typedef自定义类型       struct结构体等类型  TNameInfo      tName;           / 
pt   自定义类型指针          struct结构体指针等  PTNameInfo     *ptName;         / 
------------------------------------------------------------------------------------- 
a    Array数组               数组                char           achName[20];     / 
aa   二位Array数组           多位数组            unsigned char  aabyName[4][2];  / 
------------------------------------------------------------------------------------- 
ap   存放指针的数组          存放指针的数组      char           *apchName[2];    / 
pa   指向数组的指针          指向数组的指针      unsigned char  *pabyName;       / 
------------------------------------------------------------------------------------- 
em   enum枚举类型            枚举类型            EM_NAME        emName;          4 
c    class类                 class类             CName          cName;           / 
------------------------------------------------------------------------------------- 
pf   函数指针(pointer func)  函数指针            typedef int (*pfMsgFunc)(int type); 
------------------------------------------------------------------------------------- 
s_   静态变量(static)        静态变量            static int     s_nValue; 
g_   全局变量(global)        全局变量            int            g_nValue; 
m_   类的数据成员(member)    类的数据成员        int            m_nValue; 
  
  
函数名的命名规则参考: 
  
1. 函数名的首字母建议大写,函数名采用大小写字母结合的形式 
int GetMaxValue(void) 

     do someting; 

  
2. 定义函数时,若函数无返回值,请冠以void 函数名格式;若函数无参数,请在参数中写入void格式; 
void InitData(void) 

     do someting; 

  
1. 全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组)。 
DrawBox(void); // 全局函数 
  
2. 用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。 
void SetValue(int nValue) 

     g_nValue = nValue; 

  
int GetValue(void) 

     return g_nValue; 

  
3. 回调函数最好出现“CB”字符; 
     typedef int (*pfTimerCB)(int type); 
     CreateTimer(g_TaskTimer, TaskTimerCB, NULL); 
  
3. 在同一软件产品内,避免重名的函数出现 
我们在不同的文件中都可以通过定义同样的函数 
模块A 
static void InitData(void); // 最好改成 static void InitAData(void); 
模块B 
static void InitData(void); // 最好改成 static void InitBData(void); 
  
4. 函数名的长度最好小于30字符内。可以使用缩略词语,但是要有必要的全词注释。 
tSysPara *GetSysPara(void) // tSystemPara *GetSystemParameter(void) 
  
5. 一个函数代码最好控制在100行以内,一个模块文件,代码最好控制在1000行以内。 
  
6. 最后,还有一点小小的建议,就是无论我们使用那种工具编写代码,VC6.0,SourceInsignt,UltraEdit,等 
请按照格式排板,对齐,并将tab转换成4个空格,这样便于察看,修改等。 
  
  
代码示例:与零值比较(摘自林锐博士-高质量C++/C 编程指南) 
  
1. 布尔变量与零值比较 
不可将布尔变量直接与TRUE、FALSE 或者1、0 进行比较。 
根据布尔类型的语义,零值为“假”(记为FALSE),任何非零值都是“真”(记为TRUE)。TRUE 的值究竟是什么并没有统一的标准。例如Visual C++ 将TRUE 定义为1,而Visual Basic 则将TRUE 定义为-1。 
假设布尔变量名字为flag,它与零值比较的标准if 语句如下: 
     if (flag)  // 表示flag 为真 
     if (!flag) // 表示flag 为假 
其它的用法都属于不良风格,例如: 
     if (TRUE == flag) 
     if (1 == flag) 
     if (FALSE == flag) 
     if (0 == flag) 
  
2. 整型变量与零值比较 
应当将整型变量用“==”或“!=”直接与0 比较。 
假设整型变量的名字为value,它与零值比较的标准if 语句如下: 
     if (0 == value) 
     if (0 != value) 
不可模仿布尔变量的风格而写成 
     if (value) // 会让人误解 value 是布尔变量 
     if (!value) 
  
3. 浮点变量与零值比较 
不可将浮点变量用“==”或“!=”与任何数字比较。 
千万要留意,无论是float 还是double 类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“ <=”形式。 
假设浮点变量的名字为x,应当将 
     if (0.0 == x) // 隐含错误的比较 
转化为 
     if ((x>=-EPSINON) && (x <=EPSINON)) 
其中EPSINON 是允许的误差(即精度)。 
C++ 
const float EPSINON = 0.00001; 

#define EPSINON   (float)0.00001 
  
4. 指针变量与零值比较 
应当将指针变量用“==”或“!=”与NULL 比较。 
指针变量的零值是“空”(记为NULL)。尽管NULL 的值与0 相同,但是两者意义不同。假设指针变量的名字为p,它与零值比较的标准if 语句如下: 
     if (NULL == p) // p 与NULL 显式比较,强调p 是指针变量 
     if (NULL != p) 
不要写成 
     if (0 == p) // 容易让人误解p 是整型变量 
     if (0 != p) 
或者 
     if (p) // 容易让人误解p 是布尔变量 
     if (!p)

0 0
原创粉丝点击