
素材来源:micrium
编辑整理:strongerHuang
开发过项目的工程师都知道,一个好的项目,代码基本都有统一的规范,否则代码就会随着版本迭代,变得越来越臃肿。
代码规范应在项目早期建立,这些规范对于保持整个项目的一致性非常有必要,采用一致的规范可以提高效率并简化项目维护。
采用一致的规范可以:
可移植性
一致性
整洁
维修方便
容易理解
简单
下面来看看著名的µC/OS代码的规范。
/************************************************************************************************** Company Name* Address** (c) Copyright 19xx, Company Name, City, State* All Rights Reserved*** Filename :* Programmer(s):* Description :*************************************************************************************************//*$PAGE*/
/************************************************************************************************** INCLUDE FILES*************************************************************************************************/#include "INCLUDES.H"/*$PAGE*/
三、命名标识符
符合ANSI C标准的C编译器(到目前为止,大多数C编译器都这样做)最多允许32个字符作为标识符名称。标识符是变量、结构/联合成员、函数、宏、#defines等。
比如:大写字符用于分隔标识符中的单词,功能和下划线字符(_)类似。
static INT16U KeyCharCnt; /* Number of keys pressed */static char KeyInBuf[100]; /* Storage buffer to hold chars */char KeyInChar; /* Character typed *//*$PAGE*/
µC/OS命名标识符:
函数声明中的形式参数应仅包含小写字符。
自动变量名称应仅包含小写字符。
静态变量和函数应使用文件/模块名称(或其一部分)作为前缀,并应使用大写/小写字符。
extern变量和函数应使用文件/模块名称(或其一部分)作为前缀,并应使用大写/小写字符。
| 缩写 | 原意 |
| Addr | Address |
| Blk | Block |
| Chk | Check |
| Clr | Clear |
| Cnt | Count |
| CPU | Central Processing Unit |
| Ctr | Counter |
| Ctx | Context |
| Cur | Current |
| Del | Delete |
| Dly | Delay |
| Err | Error |
int atoi (char *s){int n; /* Partial result of conversion */n = 0; /* Initialize result */while (*s >= '0' && *s <= '9' && *s) { /* For all valid characters and not end of string */n = 10 * n + *s - '0'; /* Convert char to int and add to partial result */s++; /* Position on next character to convert */}return (n); /* Return the result of the converted string */}
typedef unsigned char BOOLEAN; /* Boolean */typedef unsigned char INT8U; /* 8 bit unsigned */typedef char INT8S; /* 8 bit signed */typedef unsigned int INT16U; /* 16 bit unsigned */typedef int INT16S; /* 16 bit signed */typedef unsigned long INT32U; /* 32 bit unsigned */typedef long INT32S; /* 32 bit signed */typedef float FP; /* Floating Point */
八、局部变量
一些源模块要求使用局部变量,通过使用static关键字,变量可以按字母顺序或功能顺序列出。
static char KeyBuf[100];static INT16S KeyNRd;
九、缩进
缩进有使用空格和Tab两种符号,规范通常只使用一种,不能空格和Tab两种混合使用(现在很多编辑器都支持Tab替换成空格的功能)。
如果混合使用,在不同编辑器打开代码,你就可能会看到一团糟。
µC/OS使用四个空格:
if (x < 0)z = 25;if (y > 2) {z = 10;x = 100;p++;}
十、结构体和联合体
包含结构体和联合体的格式、命名、注释等这些都需要规范,µC/OS代码使用的比较简单,也是大众化的定义:
typedef struct line { /* Structure that defines a LINE */int LineStartX; /* 'X' & 'Y' starting coordinate */int LineStartY;int LineEndX; /* 'X' & 'Y' ending coordinate */int LineEndY;int LineColor; /* Color of line to draw */} LINE;typedef struct point { /* Structure that defines a POINT */int PointPosX; /* 'X' & 'Y' coordinate of point */int PointPosY;int PointColor; /* Color of point */} POINT;
本文就写到这里,代码规范建议参考一些大厂的规范手册。当然,每家公司的代码规范可能有所不同,只要写代码是时统一就行。

长按前往图中包含的公众号关注