今天给大家分享一篇C语言编码规范,可以从源头上规避掉很多bug,希望能对大家有所帮助。01最重要的规则

编写代码时最重要的一条规则是:检查周围的代码并尝试模仿它。

作为维护人员,如果收到的补丁明显与周围代码的编码风格不同,这是令人沮丧的。这是不尊重人的,就像某人穿着泥泞的鞋子走进一间一尘不染的房子。

因此,无论本文推荐的是什么,如果已经编写了代码并且您正在对其进行修补,请保持其当前的样式一致,即使它不是您最喜欢的样式。

02一般性的规则

这里列出了最明显和最重要的一般规则。在你继续阅读其他章节之前,请仔细检查它们:

使用C99标准不使用制表符,而是使用空格每个缩进级别使用4个空格在关键字和左括号之间使用一个空格在函数名和左括号之间不要使用空格

int32_ta=sum(4,3);/*OK*/int32_ta=sum(4,3);/*Wrong*/不要在变量/函数/宏/类型中使用_或前缀。这是为C语言本身保留的对于严格的模块私有函数,使用prv_name前缀对于包含下划线_char的变量/函数/宏/类型,只能使用小写字母左花括号总是与关键字(for,while,do,switch,if,…)在同一行

size_ti;for(i=0;i5;++i){/*OK*/}for(i=0;i5;++i){/*Wrong*/}for(i=0;i5;++i)/*Wrong*/{}在比较操作符和赋值操作符之前和之后使用单个空格

int32_ta;a=3+4;/*OK*/for(a=0;a5;++a)/*OK*/a=3+4;/*Wrong*/a=3+4;/*Wrong*/for(a=0;a5;++a)/*Wrong*/每个逗号后用单空格

func_name(5,4);/*OK*/func_name(4,3);/*Wrong*/不要初始化静态和全局变量为0(或NULL),让编译器为您做

staticint32_ta;/*OK*/staticint32_tb=4;/*OK*/staticint32_ta=0;/*Wrong*/voidmy_func(void){staticint32_t*ptr;/*OK*/staticcharabc=0;/*Wrong*/}在同一行中声明所有相同类型的局部变量

voidmy_func(void){chara;/*OK*/charb;/*Wrong,variablewithchartypealreadyexists*/chara,b;/*OK*/}按顺序声明局部变量

??i.自定义结构和枚举

??ii.整数类型,更宽的无符号类型优先

??iii.单/双浮点

intmy_func(void){/*1*/my_struct_tmy;/*Firstcustomstructures*/my_struct_ptr_t*p;/*Pointerstoo*//*2*/uint32_ta;int32_tb;uint16_tc;int16_tg;charh;/*...*//*3*/doubled;floatf;}总是在块的开头声明局部变量,在第一个可执行语句之前在for循环中声明计数器变量

/*OK*/for(size_ti=0;i10;++i)/*OK,ifyouneedcountervariablelater*/size_ti;for(i=0;i10;++i){if(...){break;}}if(i*10){}/*Wrong*/size_ti;for(i=0;i10;++i)...避免在声明中使用函数调用来赋值变量,除了单个变量

voida(void){/*Avoidfunctioncallswhendeclaringvariable*/int32_ta,b=sum(1,2);/*Usethis*/int32_ta,b;b=sum(1,2);/*Thisisok*/uint8_ta=3,b=4;}除了char、float或double之外,始终使用stdint.h标准库中声明的类型。例如,8位的uint8_t等不要使用stdbool.h库。分别使用1或0表示真或假

/*OK*/uint8_tstatus;status=0;/*Wrong*/#includestdbool.hboolstatus=true;永远不要与真实相比较。例如,使用if(check_func()){…}替换if(check_func()*1)总是将指针与空值进行比较

void*ptr;/*...*//*OK,



转载请注明地址:http://www.luofumua.com/lfmgn/9644.html