前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C++】基础:Google编码风格学习

【C++】基础:Google编码风格学习

作者头像
DevFrank
发布2024-07-24 15:15:38
690
发布2024-07-24 15:15:38
举报
文章被收录于专栏:C++开发学习交流

1. 头文件

每个cpp/cc文件都对应一个h头文件,除单元测试代码和只包含main()的文件外。

所有头文件都应该有 #define 保护来防止头文件被多重包含,命名格式:<PROJECT>_<PATH>_<FILE>_H_,如:

代码语言:javascript
复制
#ifndef FOO_BAR_BAZ_H_
#define FOO_BAR_BAZ_H_
...
#endif // FOO_BAR_BAZ_H_

当函数被声明为内联函数后,编译器会将其内联展开,而不是按通常的函数调用机制进行调用。(注意:只有当函数只有 10 行或者更少时才将其定义为内联函数)

使用标准的头文件包含顺序可增强可读性,避免隐藏依赖,顺序如下:相关头文件, C 库, C++ 库,其他库的.h,本项目内的.h

2. 作用域

命名空间将全局作用域细分为独立的,具名的作用域,可有效防止全局作用域的命名冲突。另外,一般在命名空间的最后注释出命名空间的名字。

3. 类

类是 C++ 中代码的基本单元。

在构造函数中可以进行各种初始化操作。

仅当只有数据成员时使用 struct,其它一概使用 class

接口是指满足特定条件的类,这些类以 Interface 为后缀 (不强制)。

4. 函数

函数使用时倾向于按值返回,否则按引用返回。避免返回指针,除非它可以为空。

函数最好简短、凝练,避免拖长尾。

所有按引用传递的参数必须加上const

若要使用函数重载,则必须能让读者一看调用点就胸有成竹,而不用花心思猜测调用的重载函数到底是哪一种,这一规则也适用于构造函数。

5. 其他C++特性

禁止使用 C++ 异常。

使用 C++ 的类型转换,如 static_cast<>()。不要使用 int y = (int)x 或 int y = int(x) 等转换方式。

强烈建议你在任何可能的情况下都要使用 const. 此外有时改用 C++11 推出的 constexpr 更好。

C++ 没有指定整型的大小。通常人们假定 short 是16位,int是32位,long是32位,long long是64位。

适当使用 lambda 表达式。别用默认 lambda 捕获,所有捕获都要显式写出来。

只使用 Boost 中被认可的库。

6. 命名约定

函数命名,变量命名,文件命名要有描述性,少用缩写。

文件名要全部小写,可以包含下划线(_)或连字符(-),项目文件统一。

参考命名规范:

类(Class)命名使用驼峰命名法(CamelCase)命名,首字母大写:

代码语言:javascript
复制
class MyClass;
class MyAwesomeClass;

函数(Function)命名使用驼峰命名法,首字母小写,且简洁具有描述性:

代码语言:javascript
复制
void calculateSum();
void processFileData();

变量(Variable)命名使用驼峰命名法,首字母小写,且易于理解:

代码语言:javascript
复制
int numberOfStudents;
double averageScore;

常量(Constant)命名通常使用全大写,并使用下划线分隔单词:

代码语言:javascript
复制
const int MAX_VALUE = 100;
const double PI = 3.14159;

枚举(Enumeration)命名遵循类和常量的命名约定:

代码语言:javascript
复制
enum Color { RED, GREEN, BLUE };
enum Direction { UP, DOWN, LEFT, RIGHT };

类成员变量命名前面添加 m_ 或者使用驼峰命名法,或者在结尾使用下划线_:

代码语言:javascript
复制
class MyClass {
private:
    int m_value;
    double m_averageScore_;
};

7. 注释

使用///**/,统一就好。

函数声明处的注释描述函数功能,定义处的注释描述函数实现。

代码语言:javascript
复制
函数的输入输出。
对类成员函数而言: 函数调用期间对象是否需要保持引用参数, 是否会释放这些参数。
函数是否分配了必须由调用者释放的空间。
参数是否可以为空指针。
是否存在函数使用上的性能隐患。
如果函数是可重入的, 其同步前提是什么?

通常变量名本身足以很好说明变量用途。某些情况下,也需要额外的注释说明。

8. 格式

每一行代码字符数不超过80。

尽量不使用非 ASCII 字符,使用时必须使用UTF-8编码。

只使用空格,每次缩进2个空格。

倾向于不在圆括号内使用空格,关键字 ifelse 另起一行。

switch 语句可以使用大括号分段,以表明 cases 之间不是连在一起的。在单语句循环里,括号可用可不用。空循环体应使用{}或 continue

最后,请注意项目整体代码风格尽量保持一致,这样可以把精力集中在实现内容而不是表现形式上。

静态代码扫描与审查

常用的代码扫描工具有:cppcheck、cpplint等,另外还有国内的tscancode

TscanCode 是腾讯研发的静态代码扫描工具,主要支持C++。

Github开源地址:https://github.com/Tencent/TscanCode

也可通过这里下载:https://www.jb51.net/softs/669632.html

在这里插入图片描述
在这里插入图片描述

以上。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 头文件
  • 2. 作用域
  • 3. 类
  • 4. 函数
  • 5. 其他C++特性
  • 6. 命名约定
  • 7. 注释
  • 8. 格式
  • 静态代码扫描与审查
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档