因为代码写的不算多,一直没有一种遵循的代码风格,现在整理一篇,为以后的代码树立风格,保证代码可读性。
参考规范:
Google C++风格指南
华为 C语言编程规范
MISRA C Coding Standard
下文简称Google、HW、MISRA。
代码风格
编码
因为大部分使用的Windows系统,这个系统上默认编码方式都是ANSI编码,它对应一种具体的编码方式。ANSI是一种遗留编码,在不同的语言当中ANSI编码对应的编码是不同的。简体中文Windows系统中ANSI编码对应GBK编码,繁体中文(台湾)Windows系统中ANSI编码对应BIG5编码。
但在我们常用的IDE中,一般是不使用ANSI编码的,一般使用GB2312或UTF-8编码(对中文编码较友好)。一般的IDE都有设置,为了统一显示,新拿到IDE需要首先修改编码方式为UTF-8。
命名规范
既然写程序,就少不了给各种东西命名,文件名、函数名、变量名等等吧。总的来说一句话,命名要有描述性,且少用缩写。
unix like风格:单词用小写字母,字母间用下划线”_”强调内容隔开,如rx_data,tx_count;
驼峰法:首字母大写,代词顺序排布,如RxData,TxCount;
这两种风格我基本都会使用,没有谁好谁坏之说。
在写命名时可以使用一些约定俗成的缩写,如下:
单词 | 简写 |
---|---|
argument | arg |
buffer | buff |
clock | clk |
command | cmd |
compare | cmp |
configuration | cfg |
error | err |
initialize | init |
message | msg |
register | reg |
synchronize | sync |
temp | tmp |
等等吧。
在创建变量时需要再变量名前加前缀,如下
unsigned char ucCount;
char cCount;
unsigned short usCount;
short sCount;
unsigned long ulCount;
long lCount;
//指针变量前加 p
char * pcCount;
//全局变量前加 g
//静态变量前加 s
这样可以一眼看出此变量大小范围。
结构体/枚举类型
只给出一个创建格式:
/** 结构体 */
typedef struct _STUDENT
{
unsigned short StudentName;
unsigned char StudentAge ;
......
}STUDENT,*P_STUDENT;/* STUDENT 为新类型名称,P_ STUDENT 为新类型指针名*/
/** 枚举 */
typedef enum _RETURN_
{
error = 0x01,
OK
}_RETURN;
注释
以前我一般注释写的不多,前几天拿到一个代码需要消化,这都是啥和啥,代码结构很好,基本也都能看懂,但刚开始看没有注释很是有点恼火,想到我的代码拿给别人看估计也很恼火,所以就重点看下代码的注释结构吧。
注释结构,我是参考了Doxygen风格,截取出来一部分组成代码注释如下。
/*!***************************************************
* @file: test.c
* @brief: 测试代码
* @author: youke
* @date: 1,18,2018
* @note:
****************************************************/
#include "test.h"
int g_xxx = 0; ///< 全局变量
static int s_xxx = 0; ///< 静态变量
/*!***************************************************
* 计算和
* @param: None
* @return: None
* @note:
* @date: 1,18,2018
* @author: youke
****************************************************/
int sum(int a,int b)
{
return a + b;
}
/*!***************************************************
* @file: test.h
* @brief: 测试代码头
* @author: youke
* @date: 1,18,2018
* @note:
****************************************************/
#ifndef _TEST_H
#define _TEST_H
#define XXX_XXX 0
/** 枚举类型 */
typedef enum _COLOR_{
RED=0, ///< 红色
GREEN=1, ///< 绿色
YELLOW=2 ///< 黄色
} _COLOR;
/** 坐标系结构 */
typedef struct _DEMO_{
int x; ///< 横坐标
int y; ///< 纵坐标
}_DEMO,*P_DEMO;
int sum(int a,int b);
#endif
这样的注释结构可以用Doxygen软件生成注释文档,很方便。具体操作下篇博文给出。