关闭

一般互联网公司通用的c++代码规范

标签: 代码规范
243人阅读 评论(0) 收藏 举报
分类:

命名约定

1.1 通用命名规则 函数命名、变量命名、文件命名应具有描述性,不要过度缩写,类型和变量应该是名词,函数名可以用命令性动词。 例:int num_errors; int nerr;

1.2 文件及目录

1) 文件名和目录名称使用小写字母加 '_'
2) 头文件后缀名使用.h,源文件后缀名使用.cc
        例:my_file.h my_file.cc
3) 内联函数必须放在.h文件中。如果内联函数比较短,直接放在.h中,否则可以放到以-inl.h结尾的文件中

1.3 类型(class, struct, enum, typedef)

1) 以名词作为类型名
2) 每个单词以大写字母开头,后续小写字母,无下划线
   例:class MyClassName {};             enum MyEnumName {};
                  struct MyStructName {};          typedef std::map<int, int> TaskMap;

1.4 变量

1) 以名词作为变量名,变量名一律小写,单词间以下划线相连
2) 局部变量:全小写字母,下划线分割
        例: string table_name;
3) 类成员变量: 全小写字母,下划线分割单词,下划线结尾
        例: string table_name_;
4) 结构体成员: 全小写字母,下划线分割
        例: string table_name;
5) 全局变量:尽量不使用全局变量,如果必须使用,需加前缀 g_ ,以区别局部变量

1.5 函数

1) 以动词或动词短语作为函数名
2) 普通函数:每个单词以大写字母开头,后续小写字母,无下划线
        例:void InsertNode()
3) setter/getter:对于类成员的存取函数这类非常短小的函数,可使用小写字母加下划线方法
        例:
        class MyClass {
        public:
                  ...
                  string address() const { return address_; }
                  void set_address(const string& address) { address_ = address; }
        private:
                  string address_;
        };

1.6 namespace

1) namespace应反映项目名称
2) 全小写字母,下划线分割
        例:namespace scan_project

1.7 宏

1) 尽量不使用宏
2) 全大写字母,单词间下划线分割,如 THIS_IS_A_MACRO_NAME

1.8 常量,枚举值

1) 以k开头,大小写混合,
        例:const int kDaysInAWeek = 7;
                  enum EnumType {
                           kEnumValue0, kEnumValue1
                  };
2) 也可使用宏命名方法,但由于可能导致与宏名字冲突,因此推荐 kEnumValue 方法

1.9 例外情况

1) 如果与某些c/c++的现有概念类似时,应尽量与语言保持一致
        例:
        bigopen()          function name, follows form of open() 
        uint                     typedef unsigned int uint
        bigpos                         struct or class, follows form of pos 
        sparse_hash_map   STL-like entity; follows STL naming conventions 
        LONGLONG_MAX    a constant, as in INT_MAX 

注释

2.1 好的代码本身就是注释,类型和变量命名意义明确要比通过注释解释模糊的命名好得多 2.2 注释风格 使用//或/* */均可,统一就好 2.3 文件注释

1) 版本号:
2) 公司:Qihoo.net
3) 作者:名字+email
4) 文件内容描述

2.4 函数注释

1) 输入、输出的参数描述
2) 描述函数功能

2.5 类注释:每个类的定义要附着描述类的功能和用法的注释 2.6 变量、实现代码注释:对于晦涩的、重要的地方加以注释 2.7 TODO注释

1) 对临时的、短期的解决方案,或者有待优化的代码使用TODO注释
2) 使用全大写的字符串TODO,后面括号加上名字和email,后面加描述
例:TODO(***):实现***功能

格式

3.1 符合统一风格最重要 3.2 行长度:每行代码字符数不超过80 3.3 尽量不使用非ASCII字符,使用使必须用UTF-8格式 3.4 函数声明和定义

1) 函数参数、逻辑条件、初始化列表:要么所有参数和函数名放在同一行,要么所有参数并排分行;
例:ReturnTypeClassName::FunctionName(Type var1,Type var2) {
        …..
    }
如果同一行文本较多,容不下所有参数:
例:ReturnTypeClassName::FunctionLongName(Type var1,
                                          Type var2) {
2) 返回值、左圆括号总是和函数名在同一行
3) 函数名和左圆括号无空格,圆括号和参数无空格
4) 左大括号总在最后一个参数同一行的末尾
5) 右大括号总是单独位于函数最后一行
6) 右圆括号和左大括号总是有一个空格
7) 所有形参尽可能对齐

3.5 条件语句

1)提倡不在圆括号中添加空格,关键字else另起一行
2)提倡圆括号和条件之间没有空格
例:if (condition) {		//括号内无空格
       …
    } else{			
       …
    }

3.6 ./->操作符前后不要有空格,*/&后不要前后都留空格 3.7 return表达式不要加() 3.8 预处理指令/命名空间不要缩进 3.9 类声明

1)属性次序:public、protected、private
2)且关键词要缩进一个空格
3)关键词后不要有空行

3.10 水平/垂直留白不要滥用,怎么易读怎么来

其它

4.1 #define保护防止头文件被多重包含,命名格式应为<PROJECT>_<PATH>_<FILE>_H_

例:项目foo中的头文件cloudproxy/src/thread.h:
#ifndef CLOUDPROXY_ THREAD_H_
#define CLOUDPROXY_ THREAD_H_

#endif// CLOUDPROXY_ THREAD_H_

4.2 使用前置声明尽量减少.h文件中#include的数量,减少依赖
4.3 将局部变量尽可能置于最小作用域中,在声明变量时将其初始化。
注:如果变量是个对象,每次进入作用域都要调用构造函数,退出调用析构函数

例:for (int i=0;i<1000000;++i){
Foo f; //效率低
f.dosomething….
}

4.4 禁止使用class类型的全局变量(包括STL的string,vector等),如果一定要用,则使用单例模式。
4.5 对单参数构造函数申明为explicit,避免隐式转换
4.6 仅在数据集合时使用struct,其他时候均使用class
4.7 构造函数中只进行那些没有实际意义的初始化,使用Init()方法集中初始化为有意义的数据。
4.8 在任何可以使用的情况下都要使用const,编译器可以更好的进行类型检测。
4.9 禁止使用变长数组,它们在堆栈上根据数据分配大小可能导致内存泄露
4.10 使用static_cast<>()等C++类型转换,不要使用int y=(int)x 
4.12 对迭代器和其他模板对象使用前缀形式(++i)的自增、自减运算符。因为后置的自增自减需要对表达式的值进行一次拷贝。
4.13 不要使用uint32_t等无符号整型,除非是表示一个位组,即使数值不会为负值也不要使用无符号类型,使用断言来保护数据。

例:for(unsigned int i=foo.length()-1;i>=0;--i)..	代码永远不会终止(由于类型提升机制)

4.14 整数用0,实数用0.0,指针用NULL,字符用’\0’
4.15 尽可能用sizeof(varname)代替sizeof(type),当变量类型改变时代码自动同步。
4.16 定义函数时,参数顺序为:输入参数在前,输出参数在后;输入参数一般传值或常数引用,输出参数一般为非常数指针。

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:63473次
    • 积分:1059
    • 等级:
    • 排名:千里之外
    • 原创:34篇
    • 转载:115篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论