Rule1:不得使用三元操作符(? : )。
Rule2:不得残留被注释掉的废代码。
Rule3:所有标识符不超过31字符。(建议采用驼峰式或下划线式书写方式)
Rule4:不同名空间中的变量名不得相同。
Rule5:不得使用char, int, float, double, long等基本类型,应该用stdint.h中定义的类型显示表示类型的大小,如uint16_t、int32_t等。
Rule6:禁止使用八进制数。
Rule7:不得定义与外部作用域中某个标识符同名的对象,以避免遮盖外部作用域中的标识符。
Rule8:具有文件作用域的对象尽量声名为static的。(限制在本文件中)
Rule9:自动对象(栈对象)使用前必须赋初值。(局部变量定义即初始化)
Rule10:操作符&&和||的右侧表达式不得具有副作用(side-effect)。(注意短路原理,和运算符优先级问题)
Rule11:不得对有符号数施加位操作,例如 1 << 4 将被禁止,必须写 1UL << 4。(有符号数的右移应避免)
Rule12:不得对有副作用的表达式施加sizeof操作符。
Rule13:除了循环控制语句,不得使用逗号表达式。
Rule14:不得显式判断浮点数的相等性和不等性。
#include <math.h>
#define EPSILON 0.000001 //根据精度需要
if ( fabs( fa - fb) < EPSILON ) //extern float fabs(float x);
{
printf("fa<fb\n");
}
Rule15:不得遗留“永远不会用到”的代码。
Rule16:除了switch语句,不得使用标号(label)。
Rule17:不得使用goto。
Rule18:不得使用continue。???
Rule19:除了switch语句,不得使用break
Rule20:if, else if, else, while, do..while, for语句块必须使用{}括起。
Rule21:循环计数器的值不得在循环体内修改。
Rule22:禁止任何直接和间接的递归函数调用。
Rule23:不应该使用#undef。
Rule24:不得将宏作为参数传给宏函数。
Rule25:在一个宏定义中,#或##符号只能出现一次。
Rule26:禁止指针运算(代之以数组下标运算)。
Rule27:禁止超过两级的指针。
Rule28:禁止使用指向函数的非常量指针。
Rule29:禁止使用setjmp, longjmp。
Rule30:禁止使用atoi, atof, atol。(建议使用strtol, strtod等函数)
Rule31:禁止使用abort, exit, getenv。