OpenXRay/xray-16项目C++代码规范详解
前言
OpenXRay/xray-16作为一款基于X-Ray引擎的开源项目,其代码规范对于维护代码质量和团队协作至关重要。本文将深入解析该项目的C++编码规范,帮助开发者理解并遵循这些最佳实践。
基础格式规范
缩进与行宽
- 采用4个空格作为缩进单位
- 行宽限制为120列
- 多行语句的续行缩进保持4个空格
// 错误示例
GatherInfo(expression, description, arg0, arg1, file, line,
function, assertionInfo);
// 正确示例
GatherInfo(expression, description, arg0, arg1, file, line,
function, assertionInfo);
大括号风格
- 开括号与闭括号应在同一缩进层级
- 类/结构体/枚举定义时,开括号应在新行
// 错误示例
if (lastErr==ERROR_SUCCESS) {
*buffer = 0;
return;
}
// 正确示例
if (lastErr==ERROR_SUCCESS)
{
*buffer = 0;
return;
}
命名规范
大小写规则
- 类/结构体/枚举:PascalCase
- 函数:PascalCase
- 公共和保护字段:PascalCase
- 私有字段:camelCase
- 局部变量:camelCase
- 全局变量:PascalCase
- 命名空间:PascalCase
特殊例外
- 数学基本类型可使用小写:
vector2f
,angle3f
- 类型别名可使用小写:
uint
,int16
控制结构规范
if/else语句
if
条件后应有空格then
部分应单独一行else if
应与起始if
对齐
// 错误示例
if(OnDialog) OnDialog(true);
// 正确示例
if (OnDialog)
OnDialog(true);
switch语句
case
标签不缩进- 单行
case
语句后加一个空格
switch (vendor)
{
case Vendor::Intel:
...
case Vendor::AMD:
...
}
函数规范
函数声明与定义
- 函数名与括号间无空格
- 参数列表应合理换行对齐
- 避免在函数调用中修改变量值
// 正确声明方式
static void Backend(const char* reason, const char* expression,
const char* arg0, const char* arg1, const char* file, int line,
const char* function, bool& ignoreAlways);
// 错误示例
CalcXY(i++, 2); // 避免在参数中修改变量
// 正确方式
CalcXY(i, 2);
i++;
类设计规范
访问修饰符
- 访问修饰符应与类定义同级缩进
- 每个访问块应有明确分隔
class ObjectComparer
{
public:
ObjectComparer();
int Compare(const Object& a, const Object& b);
private:
int InternalCompare(const Object& a, const Object& b);
};
接口类设计
- 声明纯虚析构函数
- 在类外提供空实现
class IServer
{
public:
virtual ~IServer() = 0;
};
inline IServer::~IServer() {}
预处理指令规范
头文件保护
- 使用
#pragma once
而非传统宏保护 - 文件末尾保留空行
// 正确示例
#pragma once
// 文件内容...
// 文件末尾空行
条件编译
- 简单
#if
不缩进 - 复杂条件编译保持对齐
- 必要时在
#endif
后添加注释
#ifdef WINDOWS
::Sleep(milliseconds);
#else
::sleep(milliseconds);
#endif
最佳实践建议
- 初始化规范:
- 使用
{}
进行零值初始化 - 避免使用
memset
- 使用
// 错误示例
ShaderParams params;
memset(¶ms, sizeof(params), 0);
// 正确示例
ShaderParams params = {};
-
类型选择:
- 优先使用项目定义的类型而非平台特定类型
- 例如使用
uint32
而非DWORD
-
注释风格:
- 优先使用C++风格注释(
//
) - 注释应与代码对齐或置于行尾
- 优先使用C++风格注释(
// 绘制叠加统计信息
DrawStats(); // 绘制叠加统计信息
- 宏定义:
- 宏名称全大写
- 多语句宏使用
do...while(false)
包裹
#define DO_THIS_AND_THAT() \
do { \
DoThis(); \
DoThat(); \
} while (false)
总结
OpenXRay/xray-16的代码规范强调代码可读性、一致性和可维护性。通过遵循这些规范,开发者可以:
- 保持项目代码风格统一
- 减少常见编码错误
- 提高代码审查效率
- 便于团队协作开发
建议开发者在实际编码过程中持续参考这些规范,并将其作为代码审查的重要标准之一。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考