一.排版:
- 代码缩进空格数为4个;
- 较长的语句分2行来写;
- 函数的参数较多、较长时,分多行来书写;
- if、do、while、switch、for、case等关键字,必须加上大括号{}。
二.注释:
- 边写代码边注释,修改代码同事修改相应的注释,以保持注释与代码的一致性;
- 说明性文件必选在文件头着重说明,例如*.c、*.h文件;
- 函数头应该要注释,包括函数名称、输入参数、返回值、功能说明等;
- 全局变量和关键的局部变量要注释其功能;
- 复杂的宏定义同样要加上注释;
- 复杂的结构体同样要加上注释;
- 如有相对独立的语句组注释,写在语句组上行,不留空格。
三.标示符:
- 变量的命名;
- 局部变量以小写字母命名;
- 全局变量以首字母大写方式命名(骆驼式);
- 定义类型和宏定义常数以大写字母命名;
- 变量的作用域越大,它的名字所带有的信息就应该越多。
- 变量命名要注意缩写并且让人简单易懂,若是特别缩写要详细说明;
- 全局变量和全局函数的命名一定要详细,不惜多用几个单词;
- 用于编译开头的文件头,必须加上当前文件名称,防止编译时产生冲突;
- 禁止用汉语拼音作为标示符名称;
- 建议名称间的区别要显而易见。
四.表达式和基本语句:
- 不要编写太复杂的复合表达式;
- 不要有多用途的复合表达式;
- 如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免使用默认的优先级;
- if语句:
- 不可将布尔变量直接跟TRUE、FALSE或者1、0进行比较;
- 应当将整型变量用"=="或"!="直接与数字比较;
- 避免将浮点变量用"=="或"!="直接与数字比较,应该转化为">="或"<="形式。
五.杂项:
- 一些常量(如圆周率PI)或者常需要在调试时修改的参数最好用#define定义;
- 不要轻易调用某些库函数;
- 对各优先级不熟的话,加上括号;
- 不管有没有无效分支,switch函数一定要default分支;
- 函数的参数和返回值没有的话最好使用void;
- 一些常数和表哥之类的应该放在code中去节省RAM;
- 程序编完编译看有多少code多少data,注意不要使堆栈为难;
- 减少函数本身或函数间的递归调用;
- 编写可重入函数时,若使用全局变量,则应通过关中断、信息量(P、V操作)等手段对其加以保护;
- 在多重循环中,应将最忙的循环放在最内层;
- 避免循环体内含判断语句,应将循环语句置于判断语句的代码块之中;
- 系统运行之初,要初始化有关变量及运行环境,防止未经初始化的变量被引用;
- 编写代码时要注意随时保存,并定期备份,防止由于断电、硬盘损坏等原因造成代码丢失。