编程规范.md
资料来源
ROS C++ Style Guide,本文基本严格遵守ROS出的Cpp规范
Google C++ Style Guide
ROS PyStyleGuide,Python的编程规范可以主要参考这个
Google Python Style Guide
各种常见的命名形式
- CamelCased: 大驼峰命名法,又叫帕斯卡(Pascal)命名法。每个单词均不省略,且每个单词首字母均大写,单词与单词之间无下划线
- camelCased: 驼峰命名法,每个单词均不省略,且初第一个单词首字母小写之外,其他单词首字母均大写,单词与单词之间无下划线
- under_scored: 含有下划线的命名,每个单词均不能用缩写并且每个字母都是小写形式,单词与单词之间必须用“_”下划线连接
- ALL_CAPITALS: 所有单词的所有字母均大写,单词之间以下划线相连。
此外还有一种匈牙利命名法,因不使用,不再赘述。
ROS中Cpp基本命名规范
Package包
建议采用under_scored方式命名
Topics/Services
建议采用under_scored方式命名
Files文件命名
建议所有文件命名采用under_scored的方式命名
其中cpp的头文件以“.h”结尾,源代码文件以“.cpp”结尾
如果一个文件是一个类ActionServer
,则文件采用action_server.cpp
方式命名
Folder文件夹命名
建议所有文件夹命名采用under_scored的方式命名
Windows不支持文件夹区分大小写,Linux支持文件夹区分大小写,故建议一律小写,并且避免使用空格。但是对于一些包含内容很广泛,含义也很广泛的文件夹,可用CamelCased的方式命名,比如:Downloads
Class 类名
建议采用CamelCased的方式命名
一个设计的比较好的类的封装,一定能够最多用3个单词的类名描述清楚。
注意
类声明的次序是:typedefs和enums,常量,构造函数,析构函数,成员函数(含静态成员函数),数据成员,含静态数据成员
作用域次序是:public, protected, private, 成员函数在数据成员前
函数Function命名
函数命名建议采用camelCased,如:bool insertKeyframe(cv::Mat picture_instance)
这里分歧较多,一般来说,越权威的库更倾向于小写,比如Cpp标准库和Boost库采用under_scored的方式,openCV库采用了camelCased的命名方式,ORBSLAM采用了CamelCased的命名方式,Google建议采用CamelCased的命名方式,为了与已有代码统一,本项目建议统一采用camelCased的方式作为函数命名。
注意
每个函数不建议超过40行
函数命名中建议采用“动词+名词对象”的形式,不能使用介词
函数输入参数在前,输出参数在后
变量Variable命名
变量命名建议使用under_scored
变量名禁止过度缩写
常量
常量请全部大写,单词之间以下划线分割
成员变量
建议以under_scored方式命名,并且在后面加上“_”下划线,例如:min_distance_
全局变量
建议以under_scored的方式命名,并在前面加"g_",例如:g_max_distance
命名空间名称
建议以under_scored方式命名
更多Cpp命名规范
- 缩进建议用4个空格,但是Clion中也可以用Tab,会自动转换为4个空格。
- if语句,while语句和for语句请务必加上大括号“{ }”
- 所有类请务必用
#ifdef PACKAGE_PATH_FILE_H #define PACKAGE_PATH_FILE_H #endif
来保护。
注释规范
类注释
示例:
/**
@brief 这个类是为了实现。。。。
其实现目的是干嘛。。。
详细描述,必须与上面隔一空行
*/
class ExampleClass{
};
函数注释
示例:
/**
@brief 打开文件
@param[in] fileName 要打开的文件名
@param[out] var_name 描述
@param[in,out] var_name 描述
@param var_name 这种写法也可以
@return 返回文件编号
@note 注意文件打开后,则必须。。。。
*/
int OpenFile(const char* fileName, const char* fileMode);
变量注释
示例:
int var; ///< 创建一个int类型的变量
///< 这一行可选,如果上面只有一行,则是brief介绍,如果有多行,则是detail介绍
命名空间注释
/**
@brief 命名空间的简单概述 \n(换行)
命名空间的详细概述
*/
namespace OST
{
}