C语言的代码规范

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,不做大规模重构。