RFC 8:开发人员指南

作者:弗兰克·温特丹

联系方式:warmerdam@pobox.com

状态:草稿

目的

本文档旨在记录GDAL/OGR项目的开发人员实践。这将是一份不断发展的文件。

便携性

GDAL力求广泛地移植到32位和64位计算环境中。它以多种方式完成这一任务——避免编译器特定的指令,避免新的,但可能不是广泛可用的C++方面,最重要的是通过抽象在GDAL/端口目录中的CPL函数中的平台特定操作。

一般来说,对于内存分配、路径解析、文件系统io、多线程函数和ODBC访问等操作,应优先使用可用的CPL函数而不是操作系统函数。

变量命名

现有的GDAL和OGR代码大多使用一个经过修改的匈牙利命名约定。使用此约定不是强制性的,但是在使用此约定维护代码时,希望继续遵循此约定并进行更改。最重要的是,请避免使用不当,因为这可能会非常混乱。

在匈牙利语中,前缀说明了变量的类型和潜在语义。下面是GDAL/OGR中使用的一些前缀。

  • a :数组

  • b C++语言。也用于C中只有真/假值的int。

  • by :字节(GB/无符号字符)。

  • df :浮点值(双精度)

  • e :枚举

  • i :整数,用作基于零的数组或循环索引。

  • f :浮点值(单精度)

  • h :不透明句柄(例如GDALDatasetH)。

  • n :整数(未指定大小)

  • o C++对象

  • os :CPLString字符串

  • p :指针

  • psz :指向以零结尾的字符串的指针。(例如“char * pszName;”)

  • sz :以零结尾的字符串(例如“char szName [100] ;")

  • 待办事项:常量(全局或全局到文件)如何?提议: k

前缀可以堆叠。下面是一些有意义变量的例子。

  • * 烧焦! * 帕普兹代币 :指向字符串数组的指针。

  • * 利息 聚能带 :指向数字数组的第一个元素的指针。

  • * 双重的 padfScanline公司 :指向双精度数组的第一个元素的指针。

  • * 双重的 pdfMeanRet公司 :指向单双精度的指针。

  • * GDALRasterBand 波带 :指向单个对象的指针。

  • * GByte 帕比海德尔 :指向字节数组的指针。

还可以注意到,变量名的标准约定是将变量名中的每个单词大写。

内存分配

按照 RFC 19: Safer memory allocation in GDAL ,可以使用VSIMalloc2(x,y)而不是执行CPLMalloc(x * y) 或VSIMalloc(x * y) 是的。VSIMalloc2将检测乘法中的潜在溢出,如果发生,则返回空指针。这在与栅格尺寸或栅格块尺寸相关的GDAL栅格驱动程序中非常有用。类似地,VSIMalloc3(x,y,z)可以用作CPLMalloc(x)的替换 * Y * z) 是的。

标题和注释块

杂项。笔记

  • 使用小写文件名。

  • 用于C++文件(不.cc)的.CPP扩展。

  • 避免在文件名或目录名中使用空格或其他特殊字符。

  • 使用4个字符缩进级别。

  • 在源代码中使用空格而不是硬制表符。

  • 尽量将行保持在79个字符或更少。

也见

Python代码

  • autotest、swig/Python/scripts和swig/Python/samples中的所有Python代码都应该通过Pyflakes检查器(当前使用的版本是0.8.1)。这是由Travis CI jobs断言的

  • 编写的Python代码应该与Python 2和Python 3兼容。