为了提高团队协作的工作效率、避免不必要的麻烦,各位开发人员有必要遵守一些规则。
- 所有代码和文本文件都使用**UTF-8(无BOM)**编码,末尾要加空行。
- 严禁擅自修改许可证。
- 进行push操作时请仔细检查,不要上传目标代码二进制文件。
- 严禁恶意上传大文件或二进制文件,或者恶意修改他人代码,否则将施以严厉处罚。
- 所有分支都应属于项目的一部分,除releases分支外都应计划最终合并到主分支。
- 经常浏览issues,解决属于你范围的issues。
- 当本地与远程的commit历史出现差异时,使用
rebase
而不是merge
。 - 文档编写者应尽自己所能使别人能清晰地看出你想表达什么。文档包括但不限于
Markdown
格式的所有文件,doc
目录下的所有文件,提交说明,里程碑说明,Release说明,代码注释。要善于利用格式。
- 请开发人员加入NEWorld开发组的QQ群以便交流,群号为308354849。
- 确保主要开发人知晓并同意你要做的大修改(包括但不限于重构,加入新库)。
- 若覆写Git库,请通知其他开发者。
- 所有代码使用4个空格缩进。
- 原则上使用
Allman/BSD
代码风格,namespace
中的代码需要缩进(astyle参数--style=allman --indent=spaces=4 --indent-namespaces --keep-one-line-blocks --indent-preproc-block --indent-preproc-define --mode=c
)。
- 使用
enum class
而不是enum
- 不出现除了常量外的全局变量(包括在namespace内),常量应该尽可能定义为constexpr,必须定义为const。
- 当A类方法内部需要调用B类方法时,向A类方法传入B类实例的引用,而不是使用全局变量或工厂模式。
- 不允许在commit中出现临时系统架构实现,必须包含类架构,即使方法未实现。
- 除非别无他法或者影响可读性,不允许实现写在头文件中。
- 在大多数情况下优先考虑通用性和可扩展性而非效率。
- 使用正确的C/C++语法和规则编写正确的C/C++代码,每个人对自己写的代码负责。
- 应该对所有可能的情况和边界条件都做出错误检测,包括但不限于:
- 文件不存在
- 类型越界
- enum越界
- nullptr指针解引用
- 错误的输入
按优先级从低到高排序
- Using别名、类名、结构名、枚举名使用大驼峰。
- 函数名(含类方法)、变量名(含结构成员)、枚举值使用小驼峰。
- 类私有变量使用
m
加大驼峰。
- 函数要在声明前一行加注释说明其功能;推荐在大段代码中在某些位置加注释以说明代码。
- 不出现不能达到说明代码、注明功能、防止分歧的目的的注释,以及无用注释(License除外)。
- 尽量编写不需要注释就能简单理解的代码和系统架构。
- 如果不能保证错误不会造成影响,相比于让程序继续执行直到崩溃,应该让程序立刻退出并给出足够的信息,实例:
- 在
delete
一个指针后,除非以此为判断依据,否则不要把指针值置为nullptr,这会隐藏导致多次delete
的逻辑错误。
- 如果一个功能因为没有被实现或者已知问题导致无法正确执行,若此功能不会影响全局,应提示并继续执行,否则遵循1。
- PluginAPI 使用C语言格式。
确保你使用的库都是可以跨平台(Windows, Linux, OSX)的。
namespace Hashing
{
class MyHash
{
public:
MyHash();
private:
int mPrivate;
};
void initCRC32Table()
{
if(CRC32TableInitialized)
{
return;
}
// ...
}
}