【C语言】代码命名规范
#ifndef _MSG_H_#define _MSG_H_typedef struct msg_s{uint8_t msgType;uint8_t msgId;uint8_t msgLen;void (*fpSendMsg) (uint8_t *data);} msg_t,*msg_pt;msg_t g_msg;//全局变量void gSendMsg(uint8_t *data);//全局函数#endif
#include "msg.h"static msg_t _msg;//文件内静态变量static void _SendMsg(uint8_t *data){//文件内静态函数static int f_msg;//函数内静态变量}
C命名规范有很多,这里统一下自己的使用习惯,以以上代码为例,说明命名规则:
一、变量的命名
1.以驼峰式命名作为基础
驼峰式命名:混合使用大小写字母来构成标识符的名字,其中第一个单词首字母小写,余下的单词首字母大写,且尽量使用缩写,如:msgType
;驼峰式命名补充:若只有一个关键词,使用小写,如:msg
。2.下划线辅助定义
下划线只在描述变量属性的时候使用
描述类型:使用后缀_s
表示这是一个结构体(struct);struct msg_s{ };
_t
表示这是一个结构体类型(typedef);typedef struct msg_s{ } msg_t;
_pt
表示这是一个架构体指针。typedef struct msg_s{ } *msg_pt;
描述作用域:使用前缀g_
表示这是一个全局变量(global);msg_t g_msg;
_
或者n
表示这是一个文件内静态变量(native);static msg_t _msg;
f_
表示这是一个函数内静态变量。{static int f_msg;}
二、函数的命名
1.以帕斯卡命名为基础
帕斯卡(Pascal)命名法和骆驼命名法相似,但帕斯卡命名法则是第一个单词首字母大写。与函数命名相关的(包括函数指针)使用帕斯卡是为了与变量区分。如:void SendMsg (uint8_t *data);
2.前缀辅助定义
因为函数的首字母已经大写,可以直接使用小写的前缀,不需要借助下划线也不至于混淆
描述类型:使用前缀fp
表示这是一个函数指针。void (*fpSendMsg) (uint8_t *data);
描述作用域:使用前缀g
表示这是一个全局函数;void gSendMsg(uint8_t *data);
_
或者n
表示是一个文件内静态函数。static void _SendMsg(uint8_t *data);
三、宏定义
全部大写