OpenXRay/xray-16项目C++代码规范详解

OpenXRay/xray-16项目C++代码规范详解

xray-16 Improved version of the X-Ray Engine, the game engine used in the world-famous S.T.A.L.K.E.R. game series by GSC Game World. Join OpenXRay! ;) xray-16 项目地址: https://gitcode.com/gh_mirrors/xra/xray-16

前言

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

最佳实践建议

  1. 初始化规范
    • 使用{}进行零值初始化
    • 避免使用memset
// 错误示例
ShaderParams params;
memset(&params, sizeof(params), 0);

// 正确示例
ShaderParams params = {};
  1. 类型选择

    • 优先使用项目定义的类型而非平台特定类型
    • 例如使用uint32而非DWORD
  2. 注释风格

    • 优先使用C++风格注释(//)
    • 注释应与代码对齐或置于行尾
// 绘制叠加统计信息
DrawStats();  // 绘制叠加统计信息
  1. 宏定义
    • 宏名称全大写
    • 多语句宏使用do...while(false)包裹
#define DO_THIS_AND_THAT() \
do { \
    DoThis(); \
    DoThat(); \
} while (false)

总结

OpenXRay/xray-16的代码规范强调代码可读性、一致性和可维护性。通过遵循这些规范,开发者可以:

  1. 保持项目代码风格统一
  2. 减少常见编码错误
  3. 提高代码审查效率
  4. 便于团队协作开发

建议开发者在实际编码过程中持续参考这些规范,并将其作为代码审查的重要标准之一。

xray-16 Improved version of the X-Ray Engine, the game engine used in the world-famous S.T.A.L.K.E.R. game series by GSC Game World. Join OpenXRay! ;) xray-16 项目地址: https://gitcode.com/gh_mirrors/xra/xray-16

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倪燃喆Queenie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值