基础格式化规则
缩进与行宽限制
// 缩进:4个空格,禁止制表符
// 行宽:最大120字符
// 不规范示例:缩进混乱
ProcessData(input, output, paramA, paramB, source, line,
callback, metaInfo);
// 规范示例:统一4空格缩进
ProcessData(input, output, paramA, paramB, source, line,
callback, metaInfo);
大括号格式要求
// 不规范:K&R样式
if (errorCode==NO_ERROR) {
*result = 0;
return;
}
// 规范:Allman样式
if (errorCode==NO_ERROR)
{
*result = 0;
return;
}
访问修饰符对齐
class ResourceHandler
{
public:
ResourceHandler();
int Load(const Resource &res);
private:
int Validate(const Resource &res); // 正确:与public对齐
};
命名约定体系
| 类型 | 规范 | 示例 |
| 类/结构体 | PascalCase | SceneManager |
| 成员函数 | PascalCase | InitializeSystem() |
| 公共字段 | PascalCase | PlayerState |
| 私有字段 | camelCase | currentState |
| 局部变量 | camelCase | textureData |
| 全局变量 | PascalCase | GlobalConfig |
特殊命名场景
// 数学类型允许小写
vec3 position;
quat rotation;
// 接口类添加'I'前缀
class IResourceLoader;
class IRenderer;
现代C++特性规范
类型别名与枚举
// 优先使用using
using CallbackFunc = void (*)(float);
using Matrix4x4 = Matrix<4,4>;
// 强类型枚举
enum class OperationStatus
{
Success = 0,
Pending = 1,
Failure = 2,
};
智能指针应用
// 使用RAII对象
buffer_pool pool(bufferSize); // 自动管理资源
// 删除操作无需空检查
delete resourcePtr; // 内置空指针处理
override与final标识
class NetworkHandler : public INetwork
{
public:
virtual void OnConnect(IClient* client) override;
virtual void Disconnect() final;
};
预处理指令规范
头文件保护机制
#pragma once // 替代传统guard
#include "CoreConfig.h"
#include "EngineTypes.h"
条件编译规则
#ifdef DEVELOPMENT
# ifdef DEBUG
# define TRACE_ENABLED
# endif
#endif
文件组织标准
包含顺序规范
// 标准包含顺序
#include "ProjectConfig.h"
#include "Renderer.h"
#include <vector>
注释与文档准则
// 单行注释对齐代码
RenderStatistics(); // 显示性能指标
// TODO标记待处理问题
ParseArguments(argv, argc);
// TODO: 实现动态缓冲区扩展
最佳实践指南
表达式书写标准
// 简单表达式无空格
if (count>max)
// 复杂表达式添加空格
if ((width*height) > limit)
循环结构规范
// 明确循环计数器
for (int idx = 0; idx<count; idx++)
ProcessElement(idx);
实战代码示例
#pragma once
#include "CoreDefs.h"
class ENGINE_API shared_buffer
{
buffer_node* data_{};
void Release() noexcept
{
if (data_)
{
data_->refCount--;
if (data_->refCount == 0)
data_ = nullptr;
}
}
public:
shared_buffer() = default;
[[nodiscard]]
char* GetData() const { return data_ ? data_->content : nullptr; }
};