c++代码规范

说明

本文的目的是规范代码书写,使代码具有较好的可读性。
文档中除"建议","提倡","不提倡"文字外,其他均为强制要求

一般的,建议c++程序员都去阅读并参考一下google编程风格指南,这是一个更加详细的规范,但略有复杂,本规范对其进行了简化。

语言

  • 头文件保护
    所有头文件都应该使用#define防止头文件被多重包含,命名格式为:<PROJECT>_<PATH>_<FILE>_H_
#ifndef FRPL_CORE_TIME_H_
#define FRPL_CORE_TIME_H_
...
#endif // FRPL_CORE_TIME_H_
  • 宏定义
    尽量不使用宏定义,用内联函数,const,枚举代替
const int NUM_COUNT;
  • 函数参数
    定义函数时,参数顺序为:输入参数在前,输出参数在后。
    新添加的输入参数,也要置于输出参数之前

  • 命名空间
    命名空间使用小写字母,长度应尽量短,可使用缩写
    代码库的命名空间frpl,其他项目代码的命名空间为"项目名"
    不提倡使用using(避免污染命名空间,提高编译执行速度),例如

using namespace std;
string aa;

而应使用

std::string aa;

格式

  • 使用"{"时新起一行。在整个函数只有一行时,不考虑。

  • 空格 vs 制表符
    使用空格代替制表符,每次缩进4个空格。
    为了保留使用tab的编码习惯,可以在IDE上设置用空格替换制表符(每次使用tab时,IDE会自动转为4个空格)

VS2010设置方式:Tools ->Options ->Text Editor , C/C++ -> Tabs,选择Insert spaces,设置Tab size:4
Sublime2设置方式:首选项->设置默认->修改为"tab_size":4, "translate_tabs_to_spaces": true

  • 比较操作符,复制操作符“=”、“+=”,算术操作符“+”,“%”,逻辑操作符“&&”、“&”,位域操作符“<<”等双目操作符的前后要加空格
a += b;
k = x + y;
  • 单目操作符("!"、"~"、"++"、"--"、"&")、函数参数缺省值"="前后无空格

  • 逗号,分号只在后面加空格

void fun(int a, int b);
  • 如一行语句过长,则高级运算符前后的空格可以省略
a*b + c*d

命名

  • 通用命名规则
    必须使用有意义的单词或缩写进行命名,可以使用一些通用的单词缩写(如msg等),可以但不提倡以英文单词的前3~4个字母作为其缩写;
    命名规则:以大小驼峰式命名法为主,小写字母加下划线为辅

小驼峰法:第一个单字以小写字母开始,第二个单字的首字母大写。例如:firstName、lastName。
大驼峰法:每一个单字的首字母都采用大写字母,例如:FirstName、LastName、CamelCase。

  • 文件、目录:小写字母加下划线
url_table.h
  • 类型(类、结构体、枚举):大驼峰法,无下划线
class VideoAcqAVI ...
struct DetectMsg ...
  • 变量:小写字母加下划线、全小写、小驼峰法均可,要在同一文件中保持一致
std::string table_name;
std::string tablename;
std::string tableName;

常量建议在名称前加k, 全局变量建议在名称前加g

const int kUseLimit = 9;
int gCashBalance;
  • 函数
    全局函数、类内普通函数:大驼峰法,无下划线
bool DetectVehicle()

类内get/set/inline函数:小写字母+_+变量名

void set_table_name()
void set_tableName()
class VideoAcqAVI()
{
public:
    bool Init();
    void set_tableName();
private:
    std::string tableName;
}
  • 枚举值、宏命名:全大写+下划线(不建议使用宏)
MY_EXCITING_ENUM_VALUE
  • 前缀(类型名、全局函数、链接库)
    暴露在命名空间全局作用域中的类型名、全局函数均以Fr开头(即类内函数不属于此范畴)
    动态、静态链接库均以Fr开头
    明确用于内部使用的类型、函数、库可以使用Fri开头

注释

  • doxygen注释风格

  • 文件头注释

/**
 *Copyright (c),2013, Freative
 *
 *@brief  简述文件完成的主要功能
 *@author 作者列表 
 *@version 版本
 *@date   完成日期
 *
 */
  • 类,函数,变量注释
/**
 * @class  类名
 * @brief  简述   
 * @author 作者列表   
 * @note   细节描述  
 */
  • 函数注释
/**
 * @brief xx函数
 * @param[in] a 参数说明 
 * @param[in] b 参数说明
 * @param[in] c 参数说明
 * @param[out] buf 输出结果
 * @return 0:函数执行成功。
 * @return 1:函数执行失败,原因xxx
 */
  • 类成员函数、成员变量注释
/** 成员变量描述 */ 
int  m_Var;
int  m_color;     /**< 颜色变量 */ 
  • 枚举类型注释
/**  @brief  枚举类型说明  */ 
enum  AnotherEnum         
 {             
    V1,  /**< 值描述  */            
    V2   /**< 值描述 */          
}; 
  • 代码注释
    对于实现代码中巧妙的、晦涩的、有趣的、重要的地方加以注释

  • TODO,HACK,FIXME注释
    这类注释用于在代码中留下标记,以便日后查找更改。
    为方便搜索,采用如下格式。TODO/HACK/FIXME(姓名或联系方式):注释内容

注释标识 功能
TODO 有一些额外的工作还没有做(但没有bug)
HACK 采用了丑陋的方式解决了问题
FIXME 有问题尚未解决

尽量不用FIXME,而是应fix掉这个问题。如果因时间不足解决方法丑陋,请用HACK标记

// TODO(someone@fmail.com):xxx
// HACK(tom):xxx
// FIXME(jerry):xxx

windows特性

  • 使用VS进行编译时,将警告级别设置为3级或更高,并将所有warnings当作errors处理

  • 很多代码会包含stdafx.h,为方便代码共享,不建议显式包含此头文件,而改为启用编译器选项FI以自动包含

代码库与项目开发

  • 代码库(FRPL)会补充一些额外的规范用于限定该项目的源代码。

  • 在其他项目中,也可以补充额外的规范,且为了保证项目组的代码一致性,可以有与本规范不同的约定。这些补充和变化都应在项目文档中注明。

  • 对于历史遗留项目,不改变原代码风格

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容

  • 最近在整理代码,所以将以前积累的一些代码规范方面的知识分享出来,希望能对大家编码时有所帮助。一个好的代码风格的重要...
    小小土豆dev阅读 1,904评论 3 19
  • 最近感觉自己老了,一直呆在小公司,感觉到了疲惫与苦涩,虽然并没有如老板所想已达到瓶颈,依然感觉还有好多东西可学和想...
    xuq阅读 2,422评论 12 57
  • 【按语】由于我公司正在准备开发新的App,到时可能有些iOS开发者参与进来。这时如果每个人的Objective-C...
    niu神DNS阅读 1,038评论 2 14
  • 来自 Colinhou的博客 因为代码命名不规范被老大叼了,被同事逼逼了。。。 我们写出来的代码会给很多人看,为了...
    BlessNeo阅读 522评论 1 5
  • 今天晚上,一位,身穿绿色西装的“顾客”正一跳一跳的跳到我家门前,我想:“一定是它饿了,所以它是想和我们共餐...
    袁阳feea阅读 133评论 0 1