架构师为了确保在PCL中所有代码风格的一致性,使得其他开发者及用户容易理解源码,PCL开发者制定并遵循着一套严格的编写规范,PCL的开发者都默认此规范。

3.1PCL推荐的命名规范

1、文件命名

1)所有的文件名单词之间应该用下划线隔开,如:unordered_map.cpp

2)头文件的扩展名为.h

3)模板类实现文件的扩展名是.hpp

4)源文件的扩展名是.cpp

2、目录命名

所有的目录及其子目录命名应该符合,如果由多个单词组成,其之间用下划线隔开,PCL中各个目录遵循以下规则:

1)头文件都应该放在源码目录树种的include/下。

2)模板类实现文件都应放在目录树中的include/impl/下。

3)源文件都应该放在目录树中的src/下。

3、include语句

当文件在同一目录下时include指示语句用双引号,在其他情况下则用尖括号。例如:

#include<pcl/module_name/file_name.h>

#include<pcl/module_name/impl/file_name.hpp>

#include"file_name.cpp"//在同一目录下

4、宏定义命令

宏定义中字母都采用大写格式,为头文件所定义的宏最后面还需要加上下划线,并且名称从include下目录开始,例如pcl/filters/bilateral.h对应PCL_FILTERS_BILATERAL_H_。#ifndef和#define定义放在BSD协议后面代码前面,#endif定义一直在文件结尾,并且加上一句注释掉的宏对应头文件的宏定义,例如

//the BSD license

#ifndef PCL_MODULE_NAME_IMPL_FILE_NAME_HPP_//为避免重复包含头文件而定义的宏

#define PCL_MODULE_NAME_IMPL_FILE_NAME_HPP_

//the code

#endif  //PCL_MODULE_NAME_IMPL_FILE_NAME_HPP_

5、命名空间命名

命名空间多于一个单词的,单词之间应该用下划线连接,例如:

namespace pcl_io

{

...

}

6、类/结构命名

类名(和其他自定义类型的名称)应该是CamelCased(驼峰命名)命名规范,也就是连写单词组成命名,每个单词首字母大写。但是也有例外,如果类名包含一个缩写,这个缩写应该全部大写,类名和结构名最好是名词组成的名字。例如PFHEstimation代替了EstimatePFH,下面是正确的例子:

class ExampleClass;

class PFHEstimation;

7、函数/成员函数命名

他们的命名应该采用camelCased,也就是连写单词组成命名,除了首个单词字母小写其他单词首字母大写,他们的参数命名单词之间用下划线隔开,函数和类的成员函数命名最好采用动词,应该确保这些名字能清楚表达函数或成员函数的功能,例如:checkForErrors()而不是errorCheck(),dumpDataToFile()而不是dataFiledump();正确的用法:

int applyExample(int example_arg);

8、变量命名

变量的命名应该单词之间用下划线隔开例如:

int my_variable;

1)迭代子变量命名。迭代子变量应该反应出他们迭代的对象,例如:

std::list<int> pid_list;

std::list<int>::iterator pid_it;//指示迭代的对象为点的索引

2)常量命名。常量的名字应该是全大写,例如:

const static int MY_CONSTANT=1000;

3)成员变量命名。类的成员变量命名单词之间用下划线隔开并且以下划线结尾,例如:

int example_int_;//对阅读PCL源码很有帮助,可明显区分成员变量和局部变量

9)Return语句

return语句需要在圆括号中设有返回值,即规定return语句必须有返回值,大家知道,return没有返回值也会编译,例如:

int main()

{

  return(0);

}

3.1.2 PCL推荐的缩进与格式

在PCL中每个代码块的标准缩进是两个空格,在任何情况下可以用制表符或其他空格间隔的方式进行格式化代码,PCL利用多样化的GNU类型格式。

1、命名空间缩进格式

在头文件里,命名空间的内容应该缩进两个空格,例如:

在一个实现文件里,对每一个类成员函数或函数的命名必须添加命名空间限定,例如:

void pcl::Foo::bar()

{

}

2、类格式

一个模板类的模板参数必须与类定义在不同行,如:

template<typename T>

class Foo

{

  ...

}

3、函数/类成员函数格式

每一个函数的返回类型声明必须与函数声明放在不同行,例如:

void

bar();

在函数实现的时候也一样,返回类型必须与函数声明放在不同行,例如:

或者

或者

4、花括号

它必须成对出现,与上一句代码另起一行定义,必须闭合才组成合理的程序块。

5、空格格式

如果在头文件内嵌套应用了命名空间名,需要将其缩进两个空格,如:

类和结构成员采用两个空格进行缩进,访问权限限定(public、private、protected)与类成员一级,而在其限定下的成员则需要缩进两个空格,如

6、自动格式化代码

3.1.3设计结构

1、类和应用程序接口

2、参数传递

第三章:PCL基础3.1的更多相关文章

  1. CentOS 7.4 初次手记:第三章 CentOS基础了解

    第三章 CentOS基础了解... 36 第一节 语言编码.终端... 36 I 查看语言编码... 36 II Tty?.pts/?. 36 第二节 bash/sh command. 38 I 查找 ...

  2. Struts2框架学习第三章——Struts2基础

    本章要点 —  Struts 1框架的基本知识 — 使用Struts 1框架开发Web应用 —  WebWork框架的基本知识 — 使用WebWork框架开发Web应用 — 在Eclipse中整合To ...

  3. Intel汇编语言程序设计学习-第三章 汇编语言基础-上

    汇编语言基础 3.1  汇编语言的基本元素 有人说汇编难,有人说汇编简单,我个人不做评价,下面是一个简单的实例(部分代码): main PROC mov  eax,5  ;5送EAX寄存器 add   ...

  4. 《Java从入门到失业》第三章:基础语法及基本程序结构(四):基本数据类型(字符编码和char型)

    3.6.4字符编码 咦?怎么好像有东西乱入了?不是讲基本数据类型么?哈哈,因为还剩下最后一个char型了,因为char型会牵涉到Unicode编码相关,因此我决定先科普一下字符集编码. 我儿子现在上小 ...

  5. Intel汇编语言程序设计学习-第三章 汇编语言基础-下

    3.4  定义数据 3.4.1  内部数据类型 MASM定义了多种内部数据类型,每种数据类型都描述了该模型的变量和表达式的取值集合.数据类型的基本特征是以数据位的数目量的大小:8,16,32,,48, ...

  6. 0003-20180422-自动化第三章-python基础学习笔记

    3章 内容回顾: 1. 计算机组成 2. 程序编译器 3. 变量 4. 条件 5. 循环 6. py2与py3区别 - 默认编码, - 除法, - input ,raw_input 7. 位,字节关系 ...

  7. 第三章 - SQL基础及元数据获取

    SQL的介绍 SQL的定义:结构化查询语句 SQL的作用:对库和表进行操作 SQL的常用分类 DDL 数据定义语言(Data Definition Language) DCL 数据控制语言(Data ...

  8. 《Python核心编程》 第三章 Python基础 - 练习

    创建文件: # -*- coding: gbk -*- #! /auto/ERP/python_core/chapter ''' Created on 2014年5月21日 @author: user ...

  9. React开发实时聊天招聘工具 -第三章 React基础知识回顾

    function a (props) { return <h1>hello world{this.props.asd}</h1> } class a extends React ...

  10. Intel汇编语言程序设计学习-第三章 汇编语言基础-中

    3.2  例子:整数相加减 现在来看一个进行整数加减操作的汇编语言小程序.寄存器用于存放中间数据,我们调用一个库函数在屏幕上显示寄存器的内容.下面是程序的源码: TITLE Add and Subtr ...

随机推荐

  1. memcached数据库

    Python-memcached的基本使用

  2. 转载:maven依赖范围

    其中依赖范围scope 用来控制依赖和编译,测试,运行的classpath(注意是与classpath)的关系. 主要的是三种依赖关系如下:1.compile: 默认编译依赖范围.对于编译,测试,运行 ...

  3. Why getting this error “django.db.utils.OperationalError: (1050, ”Table 'someTable' already exists“)”

    0down votefavorite   I am getting error like django.db.utils.OperationalError: (1050, "Table 's ...

  4. Maven实现直接部署Web项目到Tomcat7

    如题目,自动部署到Web服务器,直接上过程. 1.Tomcat7的用户及权限配置:在conf目录下,找到tomcat-users.xml,添加manager权限的用户. <role rolena ...

  5. facebook注册不了无法打开官网的解决办法

    上周有一个朋友问到我一个问题,问怎么facebook注册不了,facebook官网也无法打开?这个问题不知道有没有人遇到过,以前这个问题也困扰了我挺长时间的,其实想想也挺简单的,由于facebook, ...

  6. Linux基础命令-echo

    echo命令 功能:显示字符 (末尾自带换行功能) 语法:echo [-neE][字符串] 说明:echo会将输入的字符串送往标准输出.输出的字符串间以空白字符隔开, 并在最后加上换行号 -n 不在字 ...

  7. 【HTML代码】访问页面时,拨打页面中的电话号码

      这两天在写HTML页面今天要实现一个手机用户访问页面的时候,如果页面中有电话号码,点击可以打电话或者是发信息,之前没做过今天刚听说感觉很高大上会很难,实际上简单的让我内牛满面啊,,  小婊砸 (* ...

  8. [转载]关于linux下system()函数的总结

    1.曾经的曾经,被system()函数折磨过,之所以这样,是因为对system()函数了解不够深入.这里必须要搞懂system()函数,因为有时你不得不面对它. 2.先来看一下system()函数的简 ...

  9. (转)在Windows平台上安装Node.js及NPM模块管理

    本文转载自:http://www.cnblogs.com/seanlv/archive/2011/11/22/2258716.html 之前9月份的时候我写了一篇关于如何在Windows平台上手工管理 ...

  10. Day1--Python基础1--下半部分

    一..pyc是什么 1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在 ...