c++代码命名规范

    该命名规则为本人总结并计划以后使用的一套规范,参考经典C++规范及golang的命名规范,我的以为golang在某些命名规范上比较简洁、统一,令人易于理解,借助于现代化的编辑工具,咱们再也不须要过于繁琐的自说明的命名方式。golang

命名

  • 优秀的命名应当是一向的、短小的、精确的。
  • 所谓一向,就是说同一个意义在不一样的环境下的命名应当一致,譬如依赖关系,不要在一个方法中命名为depend,另外一个方法中命名为rely。
  • 所谓短小,没必要多言,当命名过长的时候,读者可能更关注命名自己,而忽视真正的逻辑内容。
  • 所谓精确,就是命名达意、易于理解
  • 须要注释来补充的命名就不算是好命名。
  • 使用可搜索的名称:单字母名称和数字常量很难从一大堆文字中搜索出来。单字母名称仅适用于短方法中的本地变量,名称长短应与其做用域相对应。若变量或常量可能在代码中多处使用,则应赋其以便于搜索的名称。
  • 作有意义的区分:Product和ProductInfo和ProductData没有区别,NameString和Name没有区别,要区分名称,就要以读者能鉴别不一样之处的方式来区分 。
  • 函数命名规则:驼峰式命名,名字能够长可是得把功能,必要的参数描述清楚,函数名名应当是动词或动词短语,如postPayment、deletePage、save。并依Javabean标准加上get、set、is前缀。例如:xxx + With + 须要的参数名 + And + 须要的参数名 + …..
  • 结构体命名规则:结构体名应该是名词或名词短语,如Custome、WikiPage、Account、AddressParser,避免使用Manager、Processor、Data、Info、这样的类名,类名不该当是动词。
  • 接口命名规则:单个函数的接口名以”er”做为后缀,如Reader,Writer。接口的实现则去掉“er”。

 

首条经验

声明位置与使用位置越远,则命名应当越长。api

 

驼峰式命名法

  • 命名规则应该使用 MixedCase
  • (不要使用 names_with_underscores)
  • 首字母缩写词都应该用大写,譬如ServeHTTP、sceneID、CIDRProcessor。

文件命名规则

文件名所有小写,能够含下划线或连字符,按项目约定命名,且尽可能保证文件名明确。好比:app

cmd_save_player_info_class.cc函数

my_use_full_class.cc工具

定义类的文件名通常是成对出现,如:post

foo_bar.hui

foo_bar.ccurl

如果类中含大量内联函数,咱们还可以使用-ini.h文件,使之文件内容更加清晰,因而又如:spa

url_table.hcode

url_table.cc

url-table-ini.h

 

类型命名规则

类型命名每一个单词首字母大写,不含下划线,以名词形式,这对于全部类型命名同样,类结构体,枚举,类定义都是如此。好比:

class MyPalayerManager{
}

struct MyPalayerManager{
}

enum Week{
    MON;
    WEEK_NUM;
}

若是模块的功能较为复杂、常量名称容易混淆的状况下,为了更好地区分枚举类型,可使用完整的前缀:

enum PullRequestStatus {
    PULL_REQUEST_STATUS_CONFLICT;
    PULL_REQUEST_STATUS_CHECKING;
    PULL_REQUEST_STATUS_MERGEABLE;
}

 

常量

常量均需使用所有大写字母组成,并使用下划线分词:

const int APP_VER = "1.0";

 

变量

变量名一概采用驼峰式命名规则,例如:

int playerID;

string tableName;

变量命名基本上遵循相应的英文表达或简写,在相对简单的环境(对象数量少、针对性强)中,能够将一些名称由完整单词简写为单个字母,例如:

  • user 能够简写为 u
  • userID 能够简写 uid 
  • 若变量类型为 bool 类型,则名称应以 Has, Is, Can 或 Allow 开头: 
bool isExist;
bool hasConflict;
bool canManage;
bool allowGitHook;

 

类成员变量

私有成员变量首字母小写,公有成员变量首字母大写,(此条规则是基于通常不会有public的成员变量,大多数是以static形式提供类成员变量),好比:

class Player{
public:
    int PlayerID;
    static Player PlayerInst;
private:
    string playerName;
}

 

全局变量

首字母大写,全局static变量首字母小写,好比 :

int SystemTime;
static int systemTime;

 

局部变量

  • 局部变量应当尽量短小,譬如使用buf指代buffer,使用idx指代index
  • 在很长的函数中可能会有不少的变量,这个时候能够适当使用一些长名字,可是写出这么长的函数,一般意味着代码须要重构了!

 

变量命名惯例

变量名称通常遵循驼峰法,但遇到特有名词时,须要遵循如下规则:

下面列举了一些常见的特有名词:

  • 若是变量为私有,且特有名词为首个单词,则使用小写,如 apiClient
  • 其它状况都应当使用该名词原有的写法,如 APIClient、repoID、UserID
  • 错误示例:UrlArray,应该写成urlArray或者URLArray
// A GonicMapper that contains a list of common initialisms taken from golang/lint
var LintGonicMapper = GonicMapper{
    "API":   true,
    "ASCII": true,
    "CPU":   true,
    "CSS":   true,
    "DNS":   true,
    "EOF":   true,
    "GUID":  true,
    "HTML":  true,
    "HTTP":  true,
    "HTTPS": true,
    "ID":    true,
    "IP":    true,
    "JSON":  true,
    "LHS":   true,
    "QPS":   true,
    "RAM":   true,
    "RHS":   true,
    "RPC":   true,
    "SLA":   true,
    "SMTP":  true,
    "SSH":   true,
    "TLS":   true,
    "TTL":   true,
    "UI":    true,
    "UID":   true,
    "UUID":  true,
    "URI":   true,
    "URL":   true,
    "UTF8":  true,
    "VM":    true,
    "XML":   true,
    "XSRF":  true,
    "XSS":   true,
}

 

参数

函数的参数和局部变量相似,可是它们默认还具备文档的功能

当参数类型具备描述性的时候,参数名就应该尽量短小:

int AfterFunc(Duration d);

int Escape(Player p);

 

当参数类型比较模糊的时候,参数名就应当具备文档的功能:

 

int Unix(int sec, int nsec);

bool HasPrefix(string s, string prefix);

 

函数命名规则

常规函数每一个单词首字母大写,使用命令式语气,好比:

int OpenFile(const string f);

bool CheckFileName(const string f);

 

成员函数,公有函数首字母大写,私有函数首字母小写,好比:

class Player{ 
public: 
   void OpenFile(const string f);

private:

   void openFile(const string f);
};

 

名字空间命名

命名空间首字母大写,好比:

namespace Network;

 

若是你必定要用到宏,全大写加下划线,好比:

#define PI_ROUND 3.0
相关文章
相关标签/搜索