1。 命名规则
1.1. 起个合适的名字
1。1.1。 类的名称(适用于C++)
² 类的名称要能告诉我们,这个类是什么。因此,类的名称通常是名词.
² 类的名字不需要告诉我们,它从哪个类继承而来的。
² 有时候加个后缀是很有用的。比如类是一个代理(Agents)时,起名叫DownloadAgent更能表达真实的意图。
1。1.2。 方法和函数的名称(适用于C/C++)
² 方法和函数通常都要执行某种行为,因此,名称要能清楚的说明它做什么:CheckForErrors() 而不是ErrorCheck(),DumpDataToFile() 而不是 DataFile()。 这样也可以很容易的区别函数和数据。
² 函数名总以动词开头,后面跟随其它名称。这样看起来更自然些。
² 可以加一些必要的后缀:
Max – 表示取最大值
Cnt – 表示当前的计数值
Key – 表示键值
例如:RetryMax 表示可接收的最大数,RetryCnt表示当前接收的数量.
² 前缀也同样有用:
Is – 用于询问一些问题。只要看到Is开头,就知道这是一个查询.
Get – 用于获取一个值。
Set – 用于设置一个值。
例如:IsHitRetryLimit.
1。1。3。 含有度量单位的名称(适用于C/C++)
² 如果一个变量用于表示时间,重量或其它度量单位,应把度量单位添加到名称中,以便开发人员更早一步发现问题。
例如:
uint32 mTimeoutMsecs;
uint32 mMyWeightLbs;
1.1。4. 缩写名称不要全部大写(适用于C/C++)
² 无论是什么缩写名称,我们总以一个大写字母开头,后面跟随的字母全部用小写。
例如:
class FluidOz; // 而不是 FluidOZ
class NetworkAbcKey; // 而不是 NetworkABCKey
1.2.类的命名(适用于C++)
² 用大写字母作为单词的分隔,每个单词的首字母大写,其它字母均小写。
² 名字的第一个字母应大写
² 不含有下划线 (’_’)
例如:
class NameOneTwo;
class Name;
1。3.类库(或程序库)命名 (适用于C/C++)
² 使用命名空间防止名字冲突.
² 如果编译器没有实现命名空间,需要用前缀来避名名字冲突,不过前缀不要过长(2个字母比较好)。
例如:
John Johnson 完成了一个数据结构的库,它可以使用JJ作为库的前缀,所以类名就象下面这样:
class JjLinkList
{
}
1。4。方法和函数的命名(适用于C++)
² 使用与类名相同的规c++strcpy函数用法则
例如:
class NameOneTwo
{
public:
int DoIt();
void HandleError();
}
1。5。类属性的命名(适用于C++)
² 属性(通常是非公有数据成员)名字以字母’m'开头.
² 在 ’m(m_)' 后面,使用与类名相同的规则。
² 'm(m_)’ 总是位于其它修饰符(如表示指针的 ’p')的前面。
例如:
class NameOneTwo
{
public:
int VarAbc();
int ErrorNumber();
private:
int mVarAbc;
int mErrorNumber;
String* mpName;
}
1。6。方法和函数参数的命名(适用于C++)
² 第一个字母必须小写。
² 第一个字母后面的单词使用与类名相同的规则.
例如:
class NameOneTwo
{
public:
int StartYourEngines(
Engine&rSomeEngine,
Engine&rAnotherEngine);
}
1.7。局部变量的命名(适用于C/C++)
² 所有字母都用小写
² 使用下划线 ’_’ 作为单词的分隔.
例如:
int
NameOneTwo::HandleError(int errorNumber)
{
int error= OsErr();
Time time_of_error;
ErrorProcessor error_processor;
}
1.8。指针变量的命名前缀(适用于C/C++)
² 指针变量多数情况应在前面加 'p'。
² 星号 '*’ 应靠近类型,而不是变量名。
例如:
String* pName=new String;
特别的:String* pName, name; 应分成两行来写:
String* pName;
String name;
1.9。引用变量和返回引用函数的命名前缀(适用于C++)
² 引用必须用 'r’作前缀修饰。
例如:
class Test
{
public:
void DoSomething(StatusInfo&rStatus);
StatusInfo& rStatus();
constStatusInfo& Status() const; // 这里返回的是常量引用,所以不符合本规则
private:
StatusInfo& mrStatus;
}
1。10。 全局变量的命名前缀(适用于C/C++)
² 全局变量总是以 'g(g_)’ 作为前缀。
例如:
Logger g_Log;
Logger* g_pLog;
1。11. 全局常量的命名(适用于C/C++)
² 全局常量全部大写,并以下划线 ’_’ 分隔单词。
例如:
const intA_GLOBAL_CONSTANT = 5;
1。12. 静态变量的命名前缀(适用于C++)
² 静态变量以 ’s' 作为前缀。
例如:
class Test
{
public:
private:
staticStatusInfo m_sStatus;
}
1。13. 自定义类型(typedef)的命名(适用于C/C++)
² 类型定义名称指的是用typedef定义的名称.
² 类型定义名称使用与类名相同的规则,并使用Type作为后缀.
例如:
typedefuint16 ModuleType;
typedefuint32 SystemType;
1.14. 宏定义的命名(适用于C/C++)
² 所有单词的字母都用大写,并使用下划线 '_' 分隔.
例如:
#define MAX(a,b) blah
#define IS_ERR(err) blah
1.15. C 函数的命名(适用于C/C++)
² C++项目中,应尽量少用C函数.
² C函数使用GNU规范,所有字母都使用小写,并用下划线 ’_’ 作为单词的分隔。
例如:
int
some_bloody_function()
{
}
² 特别的,为了赚容C/C++,在必要的时候,在C++中应以下面的格式定义C函数:
extern “C” int some_bloody_function();
² 或在C/C++中推荐使用下面的格式:
#ifdef__cplusplus__
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论