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        insert / delete

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

add / delete      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  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++代码规范之命名的更多相关文章

  1. iOS代码规范之命名规范

    技术博客http://www.cnblogs.com/ChenYilong/    新浪微博http://weibo.com/luohanchenyilong   命名规范类命名    首字母大写,之 ...

  2. python基础(代码规范、命名规范、代码缩进、注释)

    代码规范 PEP8(python增强建议书第8版) 每个import语句只导入一个模块 不要在行尾添加分号";" 建议每行不超过80个字符   超出部分可以用()来进行换行例如: ...

  3. python代码规范和命名规范

    一.简明概述 1.编码 如无特殊情况, 文件一律使用 UTF-8 编码 如无特殊情况, 文件头部必须加入#-*-coding:utf-8-*-标识 2.代码格式 2.1.缩进 统一使用 4 个空格进行 ...

  4. Python代码规范与命名规则

    1.模块 模块尽量使用小写命名,首字母保持小写,尽量不要用下划线(除非多个单词,且数量不多的情况) # 正确的模块名 import decoder import html_parser # 不推荐的模 ...

  5. Android开发代码规范(转)

    Android开发代码规范 1.命名基本原则    在面向对象编程中,对于类,对象,方法,变量等方面的命名是非常有技巧的.比如,大小写的区分,使用不同字母开头等等.但究其本,追其源,在为一个资源其名称 ...

  6. iOS代码规范(OC和Swift)

    下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...

  7. 谈谈PHP代码规范

    [转] http://www.syyong.com/php/Talk-about-PHP-code-specification.html 我向往这样一个php世界,里面没有代码规范之争.你我都一样,都 ...

  8. 转!!Java代码规范、格式化和checkstyle检查配置文档

    为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ...

  9. C#代码规范

    C#代码规范  一.文件命名 1 文件名 文件名统一使用帕斯卡命名法,以C#类名命名,拓展名小写. 示例: GameManager.cs 2 文件注释 每个文件头须包含注释说明,文件头位置指的是文件最 ...

随机推荐

  1. 【河南省第十一届ACM大学生程序设计竞赛-D】.求XF+闭包

       如何设计一个好的数据库不仅仅是一个理论研究问题,也是一个实际应用问题.在关系数据库中不满足规范化理论的数据库设计会存在冗余.插入异常.删除异常等现象. 设R(U)是一个关系模式,U={ A1,A ...

  2. Last_SQL_Errno: 1062

    Last_SQL_Errno: 1062: Last_Error: Error 'Duplicate entry '212' for key 'PRIMARY'' on query. Default ...

  3. L162

    More than 250 corporate signatories joined together to try and deal with plastic pollution in an ann ...

  4. Android 屏幕密度适配

    Android Icon Size and Location for Apps   分辨率 DPI Density scale 1dp对应像素 1dp对应物理尺寸 Location Icon Size ...

  5. css移动元素的几种方法

    一.当然是元素设定为postion: absolute, 然后控制 left, top 位置 二.元素增加overflow属性,然后设置元素的scrollLeft, scrollRight当做滚动条来 ...

  6. 迭代器、foreach循环、泛型集合

    集合的迭代 语法:Iterator<Object> it=集合.iterator(); while(it.hasNext()){ Object obj=it.next(); } is.ha ...

  7. EasyPlayer Android基于ffmpeg实现播放(RTSP/RTMP/HTTP/HLS)同步录像功能

    之前有博客专门介绍了EasyPlayer的本地录像的功能,简单来说,EasyPlayer是一款RTSP播放器,它将RTSP流里的音视频媒体帧解析出来,并用安卓系统提供的MediaMuxer类进行录像. ...

  8. React Native组件(三)Text组件解析

    相关文章 React Native探索系列 React Native组件系列 前言 此前介绍了最基本的View组件,接下来就是最常用的Text组件,对于Text组件的一些常用属性,这篇文章会给出简单的 ...

  9. awk命令结合管道命令对json文件进行统计分析

    json文件内容: $ head file.json {"B": 0.337, "C": 0.663, "name": "xxx& ...

  10. 8.另类方法求1+2+...+n[AnotherMethodOfCalculateSumN]

    [题目] 求1+2+…+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字以及条件判断语句(A?B:C). [分析] 这道题没有多少实际意义,因为在软件开发中不 ...