写C语言代码,变量命名直接影响可读性。本文整理常用的命名前缀、后缀和惯例,适合初学者建立命名习惯。
一、指针相关前缀
| p | 指针(pointer) | pNode, pData, pBuf |
| pp | 二级指针 | ppList, ppArgs |
| pfn | 函数指针 | pfnCallback, pfnHandler |
int *pValue = &value;
char **ppLines = NULL;
void (*pfnOnClick)(int) = NULL;
二、类型/用途前缀
| sz | 以零结尾的字符串(string zero) | szName, szBuf |
| n | 数量(number/count) | nCount, nLen |
| c | 计数或字符 | cItems, cCh |
| b | 布尔值(bool) | bFlag, bIsReady |
| dw | 32位无符号整数(DWORD) | dwAddr, dwSize |
| w | 16位无符号整数(WORD) | wPort, wFlags |
| ch | 单个字符(char) | chKey, chFirst |
| u | 无符号(unsigned) | uCount, uSize |
char szName[64] = "hello";
int nItems = 10;
bool bFound = false;
unsigned int uTimeout = 3000;
三、常见后缀
| Buf | 缓冲区 | recvBuf, tmpBuf |
| Cnt / Count | 计数 | itemCnt, errCount |
| Len / Length | 长度 | strLen, dataLength |
| Arr / Array | 数组 | scoreArr, nodeArray |
| List | 列表/链表 | studentList, taskList |
| Str / String | 字符串 | inputStr, formatString |
| Ptr | 指针(后缀形式) | dataPtr, nodePtr |
| Cb | 回调函数(callback) | onClickCb, timerCb |
| Idx / Index | 索引 | rowIdx, startIndex |
| Max / Min | 最大/最小值 | maxRetry, minSize |
| Tmp / Temp | 临时变量 | tmpVal, tempBuf |
char recvBuf[1024];
int itemCnt = 0;
int strLen = strlen(inputStr);
int rowIdx = 0;
四、循环与临时变量惯例
| i, j, k | 循环计数器(i 外层,j 中层,k 内层) |
| tmp / temp | 临时存储 |
| ret | 函数返回值 |
| err / errno | 错误码 |
| ch | 单个字符 |
| buf | 通用缓冲区 |
| pos / offset | 位置/偏移量 |
| p | 短作用域指针 |
int ret = 0;
int i;
for (i = 0; i < n; i++) { … }
int tmp = a;
a = b;
b = tmp;
五、结构体与类型命名
C语言没有 class,但结构体和类型名用大驼峰(PascalCase),变量名用小写下划线或小驼峰:
// 类型定义:大驼峰
typedef struct StudentInfo {
char name[64];
int age;
float score;
} StudentInfo;
// 变量:小写下划线或小驼峰
StudentInfo student_info;
StudentInfo studentInfo;
// 常见 typedef 后缀
typedef struct Node_t { … } Node_t; // _t 表示类型
typedef struct tagNode { … } tagNode; // tag 前缀(Windows风格)
六、常量与宏命名
| 全大写下划线 | #define MAX_BUFFER_SIZE 1024 |
| 全大写下划线 | const int DEFAULT_PORT = 8080; |
| k 前缀(Google风格) | const int kMaxRetry = 3; |
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
总结速查表
指针: p + 名词 pNode, pData, pBuf
二级指针: pp + 名词 ppList, ppArgs
字符串: sz + 名词 szName, szPath
数量: n + 名词 nCount, nLen
布尔: b + 描述 bFlag, bIsReady
返回值: ret
错误码: err
循环: i, j, k
临时: tmp
缓冲区: buf / *Buf
回调: *Cb
索引: *Idx