# UniProton 代码&文档贡献指南
- [编程规范](#编程规范)
- [总体原则](#总体原则)
- [目录结构](#目录结构)
- [命名](#命名)
- [排版与格式](#排版与格式)
- [注释](#注释)
- [宏](#宏)
- [头文件](#头文件)
- [数据类型](#数据类型)
- [变量](#变量)
- [函数](#函数)
- [可移植性](#可移植性)
- [业界编程规范](#业界编程规范)
- [文档写作规范](#文档写作规范)
- [Commit message规范](#Commitmessage规范)
- [贡献流程](#贡献流程)
- [协议](#协议)
- [加入我们](#加入我们)
编程规范
此编程规范在业界通用的编程规范基础上进行了整理,供开发者参考使用。
### 总体原则
- 清晰,易于维护、易于重构。
- 简洁,易于理解,并且易于实现。
- 风格统一,代码整体风格保持统一。
- 通用性,遵循业界通用的编程规范。
### 目录结构
建议将工程按照功能模块划分子目录(可参考UniProton的功能模块划分),子目录再定义头文件和源文件目录。
### 命名
- 使用驼峰风格进行命名,此风格大小写字母混用,不同单词间通过单词首字母大写来分开,具体规则如下:
| 类型 | 命名风格 | 形式 |
| --------------------------- | -------------------------------- | ------------------------- |
| 函数,自定义的类型 | 大驼峰,或带有模块前缀的大驼峰 | AaaBbb, XXX_AaaBbb |
| 局部变量,函数参数,宏参数,结构体成员,联合体成员 | 小驼峰 | aaaBbb |
| 全局变量 | 带'g_'前缀的小驼峰 | g_aaaBbb |
| 宏,枚举值 | 全大写并下划线分割 | AAA_BBB |
| 内核头文件中防止重复包含的宏变量 | 带'PRT'前缀和'H'后缀,中间为大写模块名,以下划线分割 | PRT_MODULE_H |
- 全局函数、全局变量、宏、类型名、枚举名的命名,应当准确描述并全局唯一。
- 在能够准确表达含义的前提下,局部变量,或结构体、联合体的成员变量,其命名应尽可能简短。
- UniProton的对外API使用PRT_\\的方式,如果有动词和宾语,则采用PRT_\\\