嵌入式C编程规范

编程首要是考虑程序的可行性,然后是可读性、可移植性、健壮性以及可测试性。
对于在实际工作中,你要和小组内的成员之间分工合作,你要学会模块化编程、要写出更规范更安全的代码、做更合理的优化、减少更多的Bug。这些迫使你必须更彻底的理解嵌入式C的语法结构和数据细节,考虑硬件与C的对应关系并养成良好的编程习惯。

一、 排版、注释
a. 代码缩进空格数为4个。若是可能,尽量用空格来代替Tab键
b. 较长的语句要分2行来书写,并用‘\’符号隔开
c. 函数代码的参数过长,分多行来书写
d. if、do、while、switch、for、case、default等关键字,必须加上大括号{}
e. 边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除
f. 说明性文件必选在文件头着重说明,例如*.c、*.h文件
g. 函数头应该进行注释,例如函数名称、输入参数、返回值、功能说明
h. 全局变量要注释其功能,若为关键的局部变量同样需要注释其功能,复杂的宏定义同样要加上注释,复杂的结构体同样要加上注释
二、 变量命名
a、 采用匈牙利命名法:在变量前加入前缀以增进人们对程序的理解。例如:
char cLength
unsigned char ucLength
short int sLength
unsigned short int usLength
int nLength
unsigned int unLength
volatile unsigned char _ucLength
char * szBuf
unsigned char * uszBuf
b、 全局变量以首字母大写命名(骆驼式):int StudentAge;
局部变量以小写字母命名:int student_age;
定义类型和宏定义常数以大写字母命名:
#define STUDENT_NUM 10
Typedef INT16S int;

c、 变量命名要注意缩写而且让人简单易懂,若是特别缩写要详细说明
d、 全局变量和全局函数的命名一定要详细,不惜多用几个单词。不要使用单个字母做变量名,只有循环变量例外
e、 用于编译开关的文件头,必须加上当前文件名称,防止编译时产生冲突
#ifndef UARTINTERFACE_H
#define UARTINTERFACE_H
extern void UARTPrintfString(CONST INT8* str);
extern void UARTSendNBytes(UINT8 *ucSendBytes,UINT8 ucLen);
…… //其他外部声明的代码
#endif
f、 禁止用汉语拼音作为标识符名称
三、 表达式和基本语句
a、 不要编写太复杂的复合表达式
b、 不要有多用途的复合表达式
c、 如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免使用默认的优先级:
if(a | b && a & c) //不良的风格
if((a | b) && (a & c)) //良好的风格
只需记住加减运算的优先级低于乘除运算,其它地方一律加上括号
d、 布尔变量与零值比较的标准语句:
if (flag) // 表示flag为真时满足条件
if (!flag) // 表示flag为假时满足条件
e、 整型变量与零的比较应该用或!=直接比较
f、 编译器认为 if (p = NULL) 是合法的,但是会指出 if (NULL = p)是错误的。避免将赋值符号=当做比较符号
使用,可以这样判断:
if(2flag)
{
……
}
g、 不可将浮点变量用“
”或“!=”与任何数字比较,应该设法转化成“>=”或“<=”形式
四、 细节杂项
a、 一些常量(如圆周率PI)或者常需要在调试时修改的参数最好用#define定义
b、 switch函数一定要defaut这个分支,防止程序运行过程中出现的意外
c、 函数的参数和返回值没有的话最好使用void
d、 一些常数和表格之类的应该放到code中去以节省RAM
e、 程序编完编译看有多少code多少data,注意不要使堆栈为难
f、 减少函数本身或函数间的递归调用
g、 编写可重入函数时,若使用全局变量,则应通过关中断、信号量(即P、V操作)等手段对其加以保护
h、 避免循环体内含判断语句,应将循环语句置于判断语句的代码块之中
i、 系统运行之初,要初始化有关变量及运行环境,防止未经初始化的变量被引用,
j、 编写代码时要注意随时保存,并定期备份,防止由于断电、硬盘损坏等原因造成代码丢失

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值