C++代码规范之命名规则

 更新时间:2013年07月12日 09:04:19   投稿:jingxian  
以下是对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允许。
说明:下面是一些在软件中常用的反义词组。

复制代码 代码如下:

add / remove begin / end create / destroy   insert / delete
first / last get / releaseincrement / decrement   put / get
add / delete lock / unlockopen / closemin / max
old / newstart / stopnext / previoussource / target
show / hide  send / receive   up / downcut / paste

例:
复制代码 代码如下:

   int  min_sum;
   int  max_sum;
   int  add_user( BYTE *user_name );
   int  delete_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

相关文章

  • C语言实现第一次防死版扫雷游戏

    C语言实现第一次防死版扫雷游戏

    大家好,本篇文章主要讲的是C语言实现第一次防死版扫雷游戏,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • VC++中图像处理类CBitmap的用法

    VC++中图像处理类CBitmap的用法

    使用VC进行图像处理的时候,CBitmap类为我们提供了丰富的位图处理函数,本文总结了该类的相关函数和常用使用方法,包括加载位图,显示位图,析构CBitmap资源以及在内存中保存位图等内容。
    2015-11-11
  • C++索引越界的解决方法

    C++索引越界的解决方法

    本文主要介绍了C++索引越界的解决方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • OpenGL中点Bresenham绘制直线算法

    OpenGL中点Bresenham绘制直线算法

    这篇文章主要为大家详细介绍了OpenGL中点Bresenham绘制直线算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • 北邮考研复试C语言上机题目精选

    北邮考研复试C语言上机题目精选

    这篇文章主要介绍了北邮考研复试C语言上机题目精选,摘自2010年北邮CS的复试,需要的朋友可以参考下
    2015-08-08
  • Qt实现http服务的示例代码

    Qt实现http服务的示例代码

    这篇文章将为大家详细讲解有关Qt如何实现http服务,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获
    2023-04-04
  • C语言返回值指针的函数详解

    C语言返回值指针的函数详解

    这篇文章主要为大家详细介绍了C语言返回值指针的函数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • C++ OpenCV实现银行卡号识别功能

    C++ OpenCV实现银行卡号识别功能

    这篇文章主要介绍了如何使用OpenCV C++实现银行卡号识别功能,文中的示例代码讲解详细,对我们学习OpenCV有一定帮助,需要的可以参考一下
    2022-01-01
  • C语言实现字符串转浮点函数的示例

    C语言实现字符串转浮点函数的示例

    字符串不仅可以转换为整数,也可以转换为浮点数,本文主要介绍了C语言实现字符串转浮点函数的示例,具有一定的参考价值,感兴趣的可以了解一下
    2022-02-02
  • 有关C++头文件的包含顺序研究

    有关C++头文件的包含顺序研究

    下面小编就为大家带来一篇有关C++头文件的包含顺序研究。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01

最新评论