C 项目命名规范文档模板
1. 总体原则
一致性优先:所有代码必须遵循统一的命名规则,避免混乱。
可读性优先:名称应清晰表达用途,避免过度缩写。
作用域区分:通过前缀或大小写区分全局、静态、局部变量。
2. 命名风格总览
| 类型 | 命名风格 | 示例 |
|---|---|---|
| 枚举类型名 | PascalCase | ColorMode |
| 枚举值 | 全大写 + 下划线分隔 | COLOR_RGB, COLOR_YUV |
| 结构体/联合体 /typedef | PascalCase | UserInfo, PacketHeader |
| 全局变量 | g_ 前缀 + camelCase | g_systemConfig, g_errorCount |
| 静态变量 (文件作用域) | s_ 前缀 + camelCase | s_cacheSize, s_localBuffer |
| 函数名 | PascalCase | InitSystem(), ProcessData() |
| 局部变量 | camelCase | bufferLength, indexCount |
| 函数参数 | camelCase | void ProcessData(int bufferSize) |
| 静态局部变量(函数内) | static + camelCase | static int retryCount; |
| 指针变量 | p 前缀 + PascalCase/camelCase | char *pBuffer; |
| 文件名 | 全小写 + 下划线分隔 | system_init.c, data_parser.h |
| 模块前缀 | 模块缩写 + PascalCase | Net_Init(), Net_SendPacket() |
3. 详细规范说明
3.1 宏与常量
使用全大写字母,单词间用下划线分隔。 避免使用魔法数字,统一用宏定义。
#define MAX_BUFFER_SIZE 1024
#define ENABLE_DEBUG 1
3.2 枚举
枚举类型名使用 PascalCase。
枚举值使用全大写字母,下划线分隔。
typedef enum ColorMode {
COLOR_RGB,
COLOR_YUV
} ColorMode;
3.3 结构体 / typedef
类型名使用 PascalCase。
成员变量使用 camelCase。
typedef struct UserInfo {
int userId;
char userName[50];
} UserInfo;
3.4 变量
全局变量:g_ 前缀 + camelCase。
静态变量 (文件作用域):s_ 前缀 + camelCase。
局部变量:camelCase。
int g_systemStatus;
static int s_cacheSize;
void ProcessData(int bufferSize) {
int processedLength = 0;
}
3.5 函数
函数名使用 PascalCase。
参数使用 camelCase。
模块函数加模块前缀。
void Net_Init(void);
void Net_SendPacket(const char *pData, int length);
3.6 文件命名
全小写字母,单词间用下划线分隔。
.c 文件为实现,.h文件为声明。
system_init.c
system_init.h
data_parser.c
data_parser.h
4. 循环
循环内声明(C99 风格)
for (int i = 0; i < 10; ++i) {
// 使用 i
}
- 限制变量作用域是最佳实践,减少命名冲突和误用
- 代码更简洁,意图更明确
- 要求C99及更新的版本支持
4. 示例代码片段
#define MAX_BUFFER_SIZE 1024
typedef struct UserInfo {
int userId;
char userName[50];
} UserInfo;
static int s_cacheSize;
int g_systemStatus;
void InitSystem(void);
void ProcessData(int bufferSize);
void ProcessData(int bufferSize) {
static int retryCount = 0;
char tempBuffer[MAX_BUFFER_SIZE];
int processedLength = 0;
retryCount++;
}
5. 迁移策略
新增代码必须遵循此规范。
旧代码逐步迁移,优先统一宏、枚举、文件名。
保持函数和类型 PascalCase,不做大规模重构。