[逼死强迫症 - C&C++设计风格选择.1] : 命名规范
1.命名规范
1.1.常见命名法
1.2.文件命名
# C语言不纠结
file.h & file.c
# C++ Group.(注意C是大写)
file.h & file.C
# C++ Group.
file.hh & file.cc
# C++ Group.
file.hpp & file.cpp
# C++ Group.
file.hxx & file.cxx
# Teddy项目UserLog文件为例:
# Group.
UserLog.c & TedUserLog.c
# Group.
userlog.c & teduserlog.c
# Group.
userlog.c & ted_userlog.c
# Group.
user_log.c & ted_user_log.c
# Group.
user-log.c & ted-user-log.c
1.3.类型命名
/*
** 基本数据类型的重定义,小写比首字母大写更有利于延长Shift寿命,
** 但也更容易产生命名冲突。
*/
typedef unsigned char byte;
typedef unsigned char byte_t;
typedef unsigned char Byte;
typedef unsigned char Byte_t; /*
** 类与结构体常见的风格是采用PascalCase,不推荐使用camelCase
** 这种怪异的风格。
*/
class HashTable { ...
class hash_table { ...
struct FileInfo { ...
struct file_info { ... /* C语言常见到的风格还有结构体名称加'_t'后缀 */
struct fileinfo_t { ...
struct FileInfo_t { ... /* 枚举命名常见PascalCase风格 */
enum FileFlags { ...
enum file_flags { ...
1.4.命名空间命名
/* 一般使用项目名称,风格看喜好。 */
namespace my_project { ...
namespace MyProject { ...
tip.1:确保命名空间不会和常用的库冲突;
1.5.函数和变量命名
/*
** 在函数和变量命名风格上PascalCase,camelCase,
** snake_case三足鼎立,选择凭喜好。
*/
void FunctionName(void) { ...
void functionName(void) { ...
void function_name(void) { ... long VarName;
long varName;
long var_name; /*
** tip.1:snake_case在名称比较长时可读性较好;
*/
long variable_names_in_snake_case;
long VariableNamesInPascalCase;
long variableNamesInCamelCase; /*
** tip.2:PascalCase和camelCase在函数中的区分度较好,
** 在快速扫描代码逻辑的时候不易被其它符号所干扰。
*/
long FabonacciFunction(long rabbitNums)
{
if (rabbitNums < ) {
return rabbitNums;
}
long resultOne = FabonacciFunction(rabbitNums - );
long resultTwo = FabonacciFunction(rabbitNums - );
return resultOne + resultTwo;
} long fabonacci_function(long rabbit_nums)
{
if (rabbit_nums < ) {
return rabbit_nums;
}
long result_one = fabonacci_function(rabbit_nums - );
long result_two = fabonacci_function(rabbit_nums - );
return result_one + result_two;
}
tip.3:如果类需要兼容标准库迭代器或是要支持range for,begin()和end()函数会破坏PascalCase风格的一致性;
1.6.类成员变量和全局变量命名
/*
** 类成员变量和全局变量的命名风格和局部变量的命名风格
** 并没有更多的区别。唯一的问题是,是否要加前缀或后缀
** 以方便和局部变量区分开来。
*/
class UserInfo {
...
private:
std::string user_name_; /* Google style */
std::string m_userName; /* Hungarian notation */
/* 不推荐前缀'_'的风格,可能会和标准库命名冲突 */
}; /* 全局变量要少用,推荐加前缀用于区分 */
extern "C" long g_commonCount;
tip.1:在有IDE提示时,前缀"m_"的类成员变量能够很快被找到,如果不喜欢这种风格,"this->"同样也很便利;
1.7.常量和枚举值命名
/*
** 常量和枚举值的命名风格建议和局部变量的命名风格区分开,
** 常见的有全字母大写加'_'的风格,PascalCase风格,以及
** Google加'k'前缀的风格。
*/
static const int DAYS_IN_WEEK = ;
static const int kDaysInWeek = ; enum FileOpenMode {
ReadOnly, WriteOnly, ReadWrite
}; enum FileOpenMode {
READ_ONLY, WRITE_ONLY, READ_WRITE
};
tip.1:如果可以使用c++11特性,推荐enum class,否则可以在有歧义的枚举值中重复枚举类型的名字;
1.8.宏命名
/* 宏命名推荐使用全字母大写加'_'分隔的风格 */
#define OS_UNIX
#define OS_LINUX
#define OS_WINNT /* 除非你想用条件编译将某些功能变为可选项 */
#ifdef USE_TCMALLOC
#define my_malloc tcmalloc
#else
#define my_malloc malloc
#endif
tip.1:能用常量替代宏的地方尽量使用常量吧;
[逼死强迫症 - C&C++设计风格选择.1] : 命名规范的更多相关文章
- CSS 命名规范将省下调试时间
我听说很多开发者厌恶 CSS.而在我的经验中,这往往是由于他们并没有花时间来学习 CSS. CSS 算不上是最优美的『语言』,但迄今二十多年来,它都是美化 web 举足轻重的工具.从这点来说,也还算不 ...
- 这些 CSS 命名规范将省下你大把调试时间
我听说很多开发者厌恶 CSS.而在我的经验中,这往往是由于他们并没有花时间来学习 CSS. CSS 算不上是最优美的『语言』,但迄今二十多年来,它都是美化 web 举足轻重的工具.从这点来说,也还算不 ...
- 【BZOJ5505】[GXOI/GZOI2019]逼死强迫症(矩阵快速幂)
[BZOJ5505][GXOI/GZOI2019]逼死强迫症(矩阵快速幂) 题面 BZOJ 洛谷 题解 如果没有那两个\(1*1\)的东西,答案就是斐波那契数,可以简单的用\(dp\)得到. 大概是设 ...
- [LOJ3086][GXOI/GZOI2019]逼死强迫症——递推+矩阵乘法
题目链接: [GXOI/GZOI2019]逼死强迫症 设$f[i][j]$表示前$i$列有$j$个$1*1$的格子的方案数,那么可以列出递推式子: $f[i][0]=f[i-1][0]+f[i-2][ ...
- P5303 [GXOI/GZOI2019]逼死强迫症
题目地址:P5303 [GXOI/GZOI2019]逼死强迫症 这里是官方题解 初步分析 从题目和数据范围很容易看出来这是一个递推 + 矩阵快速幂,那么主要问题在于递推的过程. 满足条件的答案一定是以 ...
- 【LOJ】#3086. 「GXOI / GZOI2019」逼死强迫症
LOJ#3086. 「GXOI / GZOI2019」逼死强迫症 这个就是设状态为\(S,j\)表示轮廓线为\(S\),然后用的1×1个数为j 列出矩阵转移 这样会算重两个边相邻的,只要算出斐波那契数 ...
- Android 命名规范 (提高代码可以读性)
android文件众多,根据名称来辨别用途很重要,因此命名要规范 这篇文章可参考:Android 命名规范 (提高代码可以读性) 刚接触android的时候,命名都是按照拼音来,所以有的时候想看懂命名 ...
- CSS命名规范
DIV+CSS规范命名大全集合 前端人员必看CSS命名规范 整理: 文件名必须由小写字母.数字.中划线组成 ).所有的命名最好都小写,一律采用小写加中划线的方式,不允许使用大写字母或 _2).属性的值 ...
- .NET设计规范————命名规范
NET设计规范:约定.惯用法与模式———命名规范 前言: 最近在看<.NET设计规范:约定.惯用法与模式>一书,主要还是讲.NET的设计规范,以前对这一块也不是特别在意, ...
随机推荐
- BZOJ 1059 [ZJOI2007]矩阵游戏
1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2707 Solved: 1322[Submit][Stat ...
- P2032 「Poetize9」升降梯上
描述 开启了升降梯的动力之后,探险队员们进入了升降梯运行的那条竖直的隧道,映入眼帘的是一条直通塔顶的轨道.一辆停在轨道底部的电梯.和电梯内一杆控制电梯升降的巨大手柄.Nescafe之塔一共有N层,升降 ...
- 【转】NDK编译可执行文件在Android L中运行显示error: only position independent executables (PIE) are supported.失败问题解决办法。
原文网址:http://blog.csdn.net/hxdanya/article/details/39371759 由于使用了NDK编译的可执行文件在应用中调用,在4.4及之前的版本上一直没出问题. ...
- expresscalculate
//本程序接受任意含有+.-.*./和()的数值表达式,数值允许带小数,输入以#结束.如:((2.4+3.5)*2-(2+3.5)/2)*(2+3)# #include <stdio.h> ...
- 《JavaScript语言精髓与编程实践》读书笔记二
第3章非函数式语言特性 这一章首先介绍了语言的分类,命令式(结构化编程,面向对象编程),说明式(函数式等).而这一章,主要介绍JS的非函数式特点. 在开始之前,首先介绍了由“结构化编程”向“面向对象编 ...
- poj3469 最小割构图
题目链接:http://poj.org/problem?id=3469 #include <cstdio> #include <cmath> #include <algo ...
- jSP的3种方式实现radio ,checkBox,select的默认选择值。
jSP的3种方式实现radio ,checkBox,select的默认选择值.以radiao 为例:第一种方式:在jsp中使用java 脚本,这个方法最直接,不过脚本太多,不容易维护<%Stri ...
- JavaScript和prototype
Protoype这个词在javascript中可以有两种理解: 第一种是作为javascript中的一个属性,其一般出现的形式为:类名.prototype. prototype 属性让你有能力向对象添 ...
- [Angular 2] Passing data to components with 'properties'
Besides @Input(), we can also use properties on the @Component, to pass the data. import {Component, ...
- Windows Minifilter驱动 - 调式 (4)
写不论什么程序动态调试是很重要的.驱动开发也不例外. 通常如今写驱动的时候,都是在VM上跑的,调试手段基本也是本地windbg + 虚拟机. 虚拟机配置 我用的是win7, 第一步,看以下.成功运行后 ...