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

原创 2015年11月18日 19:41:30

命名约定

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 定义函数时,参数顺序为:输入参数在前,输出参数在后;输入参数一般传值或常数引用,输出参数一般为非常数指针。

版权声明:本文为博主原创文章,未经博主允许不得转载。

最全面的C/C++编码规范总结

对于不同的编程语言来说,具体的编码规范可以有很大的不同,但是其宗旨都是一致的,就是保证代码在高质量完成需求的同时具备良好的可读性、可维护性。例如我们可以规定某个项目的C语言程序要遵循这样的规定:变量的...
  • oNever_say_love
  • oNever_say_love
  • 2016年02月29日 11:41
  • 974

小型互联网公司的一般架构

好记忆不如烂笔头,再简单的知识,都可能被遗忘,所以能记录下点东西,就记录下来、、、 来说说一般小型的互联网公司的一般架构,欢迎拍砖指正。 1.一般互联网公司的特征: Client ...
  • supingemail
  • supingemail
  • 2016年10月26日 19:54
  • 830

什么样的员工适合互联网公司?

什么样的员工适合互联网公司?什么样的员工适合创业型的互联网公司?公司在招聘新员工的时候肯定更在意其的可塑性有多大,能否为自己所用?那如果判别一个新员工是否适合,又如何更好的激励新员工真心的为公司出力呢...
  • SmartTony
  • SmartTony
  • 2011年09月01日 09:05
  • 929

C++ 高效编程之代码规范

本文将一些常用的代码注释、命名等规范总结下,良好的代码规范不仅让自己...
  • u011686361
  • u011686361
  • 2017年01月02日 16:55
  • 437

互联网公司校园招聘时间点

校园招聘时间点
  • anneCoder
  • anneCoder
  • 2017年10月19日 23:06
  • 91

谷歌C++代码规范

头文件: 1、头文件自包含:自己编译,不依赖其他的.h文件进行编译,首选将模板和内联函数的定义放置在与其声明相同的文件中。这些构造的定义必须包含在使用它们的每个.c文件中,否则程序可能无法在某些构建...
  • qq_16783973
  • qq_16783973
  • 2017年03月10日 10:54
  • 353

C/C++语言编码规范

C++编程规范
  • wenrenhua08
  • wenrenhua08
  • 2014年09月27日 00:00
  • 14172

google c++ 编码规范

1. 命名约定 最重要的一致性规则是命名管理. 命名风格快速获知名字代表是什么东东: 类型? 变量? 函数? 常量? 宏 ... ? 甚至不需要去查找类型声明. 我们大脑中的模式匹配引擎可以非常可靠...
  • xiexievv
  • xiexievv
  • 2016年03月24日 16:55
  • 6806

我的春招之路--下篇

继续记录春招的那些事情,前面已经说了很多东西,也讲到了一些公司,不过没什么大公司,现在我想说说我经历的那些大公司的点点。对于IT界来说,首当其冲大概就是BAT了吧,这3个公司我都是投了简历的,那就一个...
  • buglei123
  • buglei123
  • 2018年01月03日 14:40
  • 105

关于代码规范的一些参考

ITOO代码走查参考 1.   不要僵尸代码、面条代码; 假数据或过于冗余的代码可以清理一下; 一些已经注释掉的代码可以删除; 2.    条件判断:三元运算; 3.    判空: “”=o...
  • mengdonghui123456
  • mengdonghui123456
  • 2017年03月29日 16:46
  • 5118
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一般互联网公司通用的c++代码规范
举报原因:
原因补充:

(最多只允许输入30个字)