C++代码规范之命名
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++代码规范之命名的更多相关文章
- iOS代码规范之命名规范
技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong 命名规范类命名 首字母大写,之 ...
- python基础(代码规范、命名规范、代码缩进、注释)
代码规范 PEP8(python增强建议书第8版) 每个import语句只导入一个模块 不要在行尾添加分号";" 建议每行不超过80个字符 超出部分可以用()来进行换行例如: ...
- python代码规范和命名规范
一.简明概述 1.编码 如无特殊情况, 文件一律使用 UTF-8 编码 如无特殊情况, 文件头部必须加入#-*-coding:utf-8-*-标识 2.代码格式 2.1.缩进 统一使用 4 个空格进行 ...
- Python代码规范与命名规则
1.模块 模块尽量使用小写命名,首字母保持小写,尽量不要用下划线(除非多个单词,且数量不多的情况) # 正确的模块名 import decoder import html_parser # 不推荐的模 ...
- Android开发代码规范(转)
Android开发代码规范 1.命名基本原则 在面向对象编程中,对于类,对象,方法,变量等方面的命名是非常有技巧的.比如,大小写的区分,使用不同字母开头等等.但究其本,追其源,在为一个资源其名称 ...
- iOS代码规范(OC和Swift)
下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...
- 谈谈PHP代码规范
[转] http://www.syyong.com/php/Talk-about-PHP-code-specification.html 我向往这样一个php世界,里面没有代码规范之争.你我都一样,都 ...
- 转!!Java代码规范、格式化和checkstyle检查配置文档
为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ...
- C#代码规范
C#代码规范 一.文件命名 1 文件名 文件名统一使用帕斯卡命名法,以C#类名命名,拓展名小写. 示例: GameManager.cs 2 文件注释 每个文件头须包含注释说明,文件头位置指的是文件最 ...
随机推荐
- Mysql加载配置默认路径
查看命令 mysqld --verbose --help|grep "Default options" -n1 输出结果 11-12:Default options are rea ...
- Web框架之Django-20-基于mysql数据库的连接
Web框架之Django-20-基于mysql数据库的连接 想要连接mysql首先需要安装pymysql这个驱动 然后在app的init文件中引入驱动 import pymysql pym ...
- windows 2008 server R2 服务器docker安装
1.安装包选择 windows win10 较新版本,使用 Get Docker for Windows (Stable) 或者 Get Docker for Windows (Edge) 其余使用 ...
- 数据存储-- Core Data的使用(一)
一.概念 1.Core Data 是数据持久化存储的最佳方式 2.数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里,或自定义数据类型 在Mac OS X 10.5Leopard及以 ...
- Js 日期选择,可以的一个页面中重复使用本JS日历,兼容IE及火狐等主流浏览器,而且界面简洁、美观,操作体验也不错。
<html> <head> <title>Js日期选择器并自动加入到输入框中</title> <meta http-equiv="con ...
- C++面向对象高级编程(一)基础篇
技术在于交流.沟通,转载请注明出处并保持作品的完整性. 概要: 知识点1 构造函数与析构函数 知识点2 参数与返回值 知识点3 const 知识点4 函数重载(要与重写区分开) 知识点5 友元 先以C ...
- Spring警告: Could not load driverClass com.mysql.jdbc.Driver(待解决)
在一个Spring项目中,新建了一个外部属性文件db.properties,在xml文件中利用${}来引用db.properties文件里面的属性. beans-properties.xml: < ...
- MAC 下安装 SVN
在mac下安装svn走了很多弯路,进过探索,现在对svn的安装做了总结,可以分为2种: 1.由于 xCode自带svn,所以可以安装xCode 1).打开App Store,搜索xCode,下载安装 ...
- JS跨页面或跨JS文件对变量赋值
JS跨页面或跨JS文件对变量赋值,这是很小的一个问题. 但问题虽小,却总觉得有点不够自然,不爽. 为什么呢?访问一个页面上的变量不是什么难事,比如用parent.变量名,或者windows名.变量名, ...
- 浅谈深度学习中的激活函数 - The Activation Function in Deep Learning
原文地址:http://www.cnblogs.com/rgvb178/p/6055213.html版权声明:本文为博主原创文章,未经博主允许不得转载. 激活函数的作用 首先,激活函数不是真的要去激活 ...