Xt命名规范整理
来源:互联网 发布:淘宝卖的飞机杯好用吗 编辑:程序博客网 时间:2024/04/28 19:53
常用编码规范
- pascal命名风格:标识符所有单词首字母大写,其他字母小写,单词尽量采用缩写形式,如:void GetIntFromStr()
- camel命名风格:标识符第一个单词所有字母小写,其他单词首字母大写,其他字母小写,单词尽量采用缩写形式,如:void getIntFromStr()
- 匈牙利命名风格:标识符以一个或者多个小写字母开头作为前缀,该前缀指明标识符的作用域、类型等属性,之后的是首字母大写的一个单词或多个单词组合,如:int iLineCount表明其为整型变量
下划线命名风格:标识符每个单词之间加下划线分离,单词字母均为小写,如:void get_int_from_str()
命名
1.Namespace
命名空间名称全部采用小写,例如net::class::space
代码文件中尽量用命名空间前缀访问变量,特别是头文件中
项目相关代码应该放在项目自己的命名空间中
Namespace不要使用RZ字样开头或结尾2.Class
Class命名采用pascal命名规范,首字母大写
案例
class DocumentMaintainer { };
成员函数采用camel风格,首字母小写,如:void setValue()
成员变量采用camel风格,但是需要加m_前缀,如:int m_myBook
静态成员函数采用camel风格
静态成员变量采用camel风格,但是需要加s_前缀,如:int s_myBaby
讯投代码中一般成员变量会用前缀标记类型,实际情况如下
private: string m_strAcccountId /*账号名称*/ string m_strPassword /*密码*/ int m_nPlatformID /*平台ID*/
3.全局标识符
全局变量采用camel风格,但是需要加g_前缀。注意:全局变量一定要在.cpp文件中定义,且做初始化赋值,头文件中只能做外部引用说明。如:
.cpp文件:double g_thisIsGloalVar = 0.0;
.h文件:extern double g_thisIsGloalVar;
4.局部标识符
·局部变量采用camel风格
·局部静态变量采用camel风格5.函数形参
·采用camel风格6.常量
·使用单词大写加下划线风格,如:const int MAX_USER_COUNT = 1024;
7. 宏定义
宏定义的宏名称使用单词大写加下划线风格,如:#define MAX_USER_COUNT 1024
带参数宏定义的参数一般采用camel风格,如:#define MAX(x, y) (x < y ? y : x)
#define UNION(dataSet1, dataSet2) (......)
8 . struct、union、enum
类型名使用pascal风格,成员使用camel风格(enum成员用常量命名方式),建议使用typedef方式定义,如:
typedef struct tagPackageHeader{ Int32 length; Byte version;}PackageHeader;typdef enum tagEncryptMethod{ ENCRYPT_NONE = 0, ENCRYPT_DES = 1, ENCRYPT_AES = 2,}EncryptMethod;typedef union tagReturnValue{ char[16] errorStr; Int32 errorNum; Int64 errorCode;}ReturnValue;// 实际struct结构定义如下struct CAuthLimit{ CAuthLimit(); int m_nStartTime; // 开始时间 int m_nEndTime; // 截至时间 double m_dMaxQuota; // 最大比率(用于资金管理)};
9.文件命名
·头文件和.cpp文件能一一对应的,文件名要相同,采用pascal风格,并且文件名要能准确概括文件内容10 . 避免使用下划线
·除了以上约定的情况外,其他标识符不要使用下划线,特别是在标识符头和尾,决不能使用下划线。11 . 标识符命名不要重复
- 不要与编程语言的关键词相同
- 不要与系统库的标识符重复
- 尽量避免与第三方库标识符重复,如果有相同标识符,要带命名空间名字访问
- 不要在相同的作用域中申明重复的标识符,不要在嵌套作用域中申明重复的标识符
12 . 标识符命名要体现其含义
实现自我注释,保持可阅读性
排版
- 1 . 头文件格式样例
文件说明
...... include <xxxx.h> …… 宏定义 ….. 前向引用申明 …… struct/enum/union申明 …… class申明 …… 全局变量引用申明 …… include <模板实现文件>
- 2 .cpp文件格式样例
文件说明
...... include <xxxx.h> …… 宏定义 ….. 全局变量定义 …… 全局函数定义 …… Class 实现
3 . 缩进
·所有的代码缩进必须用空格代替tab,缩进的宽度为4个空格,不允许使用tab键作为缩进符4 . 行宽
·所有的单行代码最好不要超过120个字符,如果超过需要手动分行。对表达式进行换行时,尽量在低优先级操作符处换行,且操作符在新行行首,并作适当缩进5 . 代码管理
·代码的实现最好全部写在.cpp文件中,头文件中只写申明,不写实现;模板类代码建议放在.hpp文件中,并在头文件中包含该.hpp文件
·代码分界符“{”和“}”单独占行,如:
建议做法:
void setValue(int value){ m_value = value;}
- 6 . 空行
·头文件中不同数据结构之间需要用一个空行分离
·函数体内功能相对独立的代码块之间需要用一个空行分离
·函数之间需要用一个空行分离
·其他功能块之间,建议用一个或两个空行分离
·行注释之前需要一个空行分离
- 7 . 条件、循环语句
关键词之后需要加一个空格再写条件表达式,并且所有代码都要包含在大括号内,那怕只有一行代码,如:
if (i < maxValue){ i++;}while (i < maxValue){ i++;}switch (i){case 1: { break; }case 2: { break; }default: { break; }}
8 . 操作符
·双目操作符与操作数之间需要用空格隔开,单目操作符与操作数之间不能加空格,“->”和“.”前后不能加空格。例子:
正确做法:c = a + b
d++
++d
错误做法:c=a+b
d ++
++ d
·当一个表达式有多个操作符时,在不明确优先级时,要用括号强制操作符的优先顺序,如:a & b + c / d | e & f
应该这样写:a & (b + (((c / d) | e) & f))
9 . 逗号、分号
用以表达式和代码分离的逗号和分号,需要在其后添加空格。
注释
注释统一采用JavaDoc风格,从而可用doxygen生成帮助文档。注释一般放在行尾或者独立占用若干行,不鼓励在代码行的中间书写注释,独立占行的注释一定要在被注释代码之的上方,且一般情况下与前面代码之间用空行隔离。如果代码修改,相应的注释一定要做相应的修改,不能让注释和代码表述不一致。注释尽量用中文书写。
独立行注释:
double businessAmount;double charge;double earnBalance;/* 计算手续费和收益 */charge = businessPrice * businessAmount * 300 * m_ifFillFee;earnBalance = (businessPrice - holdAvgPrice) * businessAmount * 300;// 同行行尾注释:double businessAmount; /* 成交量 */double charge; /* 手续费 */double earnBalance; /* 收益 */charge = businessPrice * businessAmount * 300 * m_ifFillFee; /* 计算手续费 */
- 1 . 文件注释
·对代码文件要写注释,项目至少包括:实现的功能、作者、日期、特殊说明,有必要时,要书写使用范例。
/*** IFOBDispatcher.h** 期货相关业务的处理** @author abc* @version 1.0* @date 2012-03-09*/
2 . 数据结构注释
·为每一个数据结构的定义书写注释,并且具体到每一个成员3 . 变量注释
变量的简单注释放于变量申明的行尾,复杂的注释放于变量声明的上方。
·全局变量一定要书写注释
·静态变量一定要书写注释
·局部变量不能自我解释的要书写注释
·成员变量不能自我解释的要书写注释
·函数形参不能自我解释的要书写注释,注释放于函数注释中4 . 函数注释
函数的注释放于函数申明的上方,要指明该函数实现的功能、参数列表和返回值。
·全局函数一定要书写注释
·静态函数一定要书写注释
·成员函数不能自我解释的或者参数过于复杂的需要注释
/** * processLogin()* 负责登录请求的处理* @param req 请求包* @param userName 用户名* @return 操作结果,SUCCESS_SUCCESS表示成功,其他表示失败的错误号*/TLInt32 processLogin(shared_ptr<IFOBRequest> req, const string& userName);
- 5 . 代码注释
·有复杂逻辑的代码块一定要详细注释,并指明可能发生的问题
·条件语句要书写注释,并指明边界条件
-6 . 风格统一
代码中所有注释风格要统一,也就是说对每一种功能的注释排版要一致。
程序
基本规则:代码组织越简洁越好、程序效率越高越好。
1 . 不再需要的代码一定要去掉
不再需要的变量、代码和注释不要留在程序中,且不要用注释的形式保留在程序中,除非有可能需要恢复。尽量保持代码的干净和整洁。2 . 一行代码最好只写一条语句
不要在一行代码写多条语句,特别是变量申明的时候,这样既便于注释,也便于阅读,如:
不建议做法:double curMoney, initMoney, tmpValue;
建议做法:double curMoney;
double initMoney;
doube tmpValue;
3 . 函数实现的功能尽量单一
不要奢望一个函数完成多个功能,复杂的功能要分割成多个函数处理。4 . 函数的参数尽量简化
函数的参数不要过多,函数的返回值尽量不要使用参数返回。5 . 函数的大数据结构参数尽量使用引用或指针
对于大数据结构的参数,最好使用引用或者指针传递,但要保证作用域有效,防止提前析构。6 . 多线程使用的函数要确保可重入
对公共变量要进行访问保护,但要注意死锁发生。7 . 不要过多使用全局变量和静态变量
全局变量和静态变量使程序难以维护,并且会加大模块之间的耦合度。8 . 合理选用数据结构
组织数据时,要合理选用数据结构,常用数据结构有:
链表类(如STL的deque):用于头尾两端操作比较合适
数组类(如STL的vector):用于固定下标操作比较合适
字典类(如STL的map):用于随机访问操作比较合适
一般情况下,对10个以上的数据组进行频繁查找、删除或者添加时,要用字典类结构,且使用迭代器访问,以增加操作效率,不要使用数组或者链表类结构(如vector,list)。9 . 不要使用晦涩难懂的语句,不用使用高度复杂的编程技巧
除非简单的方式达不到目标,避免把自己和别人绕晕。10 . 变量使用前要初始化
特别是作为右值使用时11 数据一处整理,多处使用
数据的整理相对耗时,尽量一处整理,多处使用,不要每次使用时都进行处理。12 . 完整处理错误条件
据统计,程序中有20%左右的代码是对错误(或者异常)情况进行处理。每一种错误情况都需要进行合理处理,因为错误往往是发生于边界条件下,一个程序的健壮性正是体现在边界条件的处理完善与否。13 . 减少程序耦合度
函数与函数之间、模块与模块之间、系统与系统之间的接口数量要少,调用次数要少,调用地方要少。14 . 对被频繁调用的函数要注意优化
比如参数传递的优化、循环语句的优化、数据处理的优化等。15 . 代码行数少,不代表执行时间少
16 . 简单的条件判断不影响效率,程序中要多做判断
文档开发,这个模块完全放弃
因为基本上就没有人写文档。
- Xt命名规范整理
- 命名规范整理
- Android 命名规范整理
- 知识整理:sql 存储过程命名规范
- Java编程风格与命名规范整理
- Android 中资源文件的命名规范整理
- java命名规范(整理互联网内容)
- Java编程风格与命名规范整理
- 网页制作CSS命名规范整理
- web前端开发代码命名规范整理
- Java编程风格与命名规范整理
- Java编程风格与命名规范整理
- 前端web开发命名规范 整理
- Java编程风格与命名规范整理说明
- [整理]创建javascript对象用用命名规范区别私用成员
- 整理一下命名规范与重构思路
- java教程:Java编程风格与命名规范整理
- Java命名规范—动力节点Java学院整理
- Android studio 3.0.1版本出现的问题: Please select at least one of the signature versions to use
- Service重要的知识点总结
- SoapUI实践:自动化测试、压力测试、持续集成
- Qt实用技巧:使用QMediaPlayer播放mp4文件
- coding基础代码注意点
- Xt命名规范整理
- SSM整合(1.框架搭建)
- OK Log 姐妹篇
- ORA-01653: unable to extend table FD by 128 in tablespace
- 13.开源项目--git修改提交
- 日常Exception(三):javax.servlet.http报红提示找不到
- “文件大小”和“占用空间”的区别
- STM32启动文件(Reset_Handler函数)
- EasyUI的combobox加载的内容不能选择--value有重复值