您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C语言编程规范和约定
C语言编程规范和约定排版排版缩进•缩进•空行空行•空格•代码长度缩进缩进缩进量if (1 == reset_flag){•缩进量=4•用空格取代TAB{reset_state();}else用空格取代TABelse{for (n=1; n20; n++){{update_state();}}}if (1 == reset_flag){resetstate();reset_state();} else {for (n=1; n20; n++) update_state();}}switch语句缩进switch语句缩进void doit()void do_it(){switch (state){{case STAT_A:…break;case STATE_B:…case向左和switch对齐break;default:bkbreak;}}程序标号程序标号s16t doit()s16_t do_it(){flag=do_A();if (ERROR==flag) (g)gotoexit;flag=do_B();if (ERROR==flag) gotoexit;…exit:l()程序标号向左顶格clear_memory();return ‐1;}空行的使用空行的使用不同的程序逻辑段落用空行分隔不同的程序逻辑段落用空行分隔•函数之间加空行函数之间加空行•变量申明和函数之间加空行逻辑段落之间加空行•逻辑段落之间加空行空行的u32_t read_flag;u32_t read_count;空行的使用u32_t write_flag;u32_t write_buff;u32_t write_count;__;s32_t read_data(u8_t *buf, u32_t size){u8_t flag;if (NULL==buf) return ‐1;if ((‐1 == size) || (size=MAX_READ_SIZE))return ‐1;flag=read_port_status();…}}s32_t read_data(u8_t *buf, u32_t size){{…}空格的使用(建议)运算符•==、=、+、‐、*、/、、、=、=、:运算符两边加空格•标点符号前不加空格,后面加一个空格•if、for、while后面加空格、、后面加空格•多重括号运算建议用空格表明层次关系if (1 tfl)if (1 == reset_flag){reset_state();count (countBUFSIZE1)? BUFSIZE1 : count+1;count = (count=BUF_SIZE‐1)? BUF_SIZE‐1 : count+1;}else if (((1==status)||(2==status)) && ((20==count)||(0==count))){{for (n=1; n20; n++){index = readport() + (count*sizeof(datat));index read_port() + (countsizeof(data_t));}}空格的使用(建议)•‐、.前后不加空格前后不加空格•++、‐‐前后不加空格(不要将++、‐‐用于有歧义的地方)•数组名和[]之间、函数名和()之间不加空格if(1==resetflag)if(1==reset_flag){reset_state();ary[5] ++ ; ary[5] ++ ; data ‐ flag=1;status . overflow=1; }}else{for(n=1 ; n20 ;n++)()index=read_port()+(count*sizeof(data_t));}空格的使用•指针指示符*和指针类型之间留空格,和指针名不留空格针名不留空格unsigned char *p1, *p2;折行•每行不超过80列•在逻辑分割点折行在逻辑分割点折行•折行内容尽量对齐if (1 == reset_flag){resetstate();reset_state();count = (count=BUF_SIZE‐1)? BUF_SIZE‐1 : count+1;}else if (((1==status)||(2==status)||(8==status)) ((()||()||())&& ((20==count)||(0==count))&& (0==flag)){{for (n=1; n20; n++){index = read_port() + (count*sizeof(data_t));}}折行perm_count_msg.head.len= NO7_TO_STAT_PERM_COUNT_LEN + STAT_SIZE_PER_FRAM*sizeof(array); act_task_table[frame_id*STAT_TASK_CHECK_NUMBER+index].occupied = stat_poi[index].occupied; act_task_table[taskno].duration_true_or_false= SYS_get_sccp_statistic_state(stat_item); report_or_not_flag= ((taskno MAX_ACT_TASK_NUMBER) && (n7stat_stat_item_valid (stat_item)) && (acttasktable[taskno]resultdata!= 0)); && (act_task_table[taskno].result_data!= 0)); for (i=0, j=0; (ifirstwordlength) && (jsecondwordlength); (ifirst_word_length) && (jsecond_word_length); i++, j++) { ... // program code ...//pogacode} 折行折行n7stat_str_compare((u8_t *)&stat_object, (u8t *) & (acttasktable[taskno]statobject) (u8_t ) & (act_task_table[taskno].stat_object), sizeof(data_t)); rect.length= 0; rect.width= 0;强制折行if (pUserCR== NULL) return; 强制折行注释注释基本要求•基本要求•模板模板基本要求基本要求•英文英文•需要大约20%的程序注释尽量让代码本身说明功能•尽量让代码本身说明功能•注释和程序一同更新•防止歧义•减少缩写•减少缩写•对于协议标准编程可以加入标准文献的索引(文献名称章节号)引(文献名称、章节号)注释位置注释位置•逻辑段落的注释放在段落前一行•语句的注释放在语句之后•注释和被注释的代码之间没有空行注释和被注释的代码之间没有空行void do_it(){{// function of following init paragraphinit_data1();initdata2();init_data2();// function of floowingdo paragraphdostep1();_p();do_step2();do_step3(3); // special notes on this line}注释位置注释位置length++; // increase length//function of following code没有必要注释g// …///去除空行if (…){…}}do_func();注释方法注释方法尽量使用作为程序内部注释•尽量使用// 作为程序内部注释•/*‐‐*/用于文件、函数头部注释段落/ / 用于文件、函数头部注释段落•在不同条件下可能被使用的代码不能注释掉用fdf掉,用#if 0 ‐‐#endif注释内容注释内容文件头需要注释段落•文件开头需要注释段落•函数开头需要注释段落函数开头需要注释段落•全局变量需要详细注释•特殊功能的局部变量需要详细注释•变量bit域详细注释变量bit域详细注释•为特殊功能的宏定义加注释注释例子注释例子#define MAXACTTASKNUMBER 1000 // active statistic task number___// state value for global variable state#define STATE_A 0#define STATE_B 1#defineSTATE_C 2// bit mask for register REG_MODE, address 0xC000F000#define BIT_MASK_RD (10)#define BIT_MASK_IRQ (13)dfiSS(000)#define BIT_MASK_START (0xFF00)u8_t status; // bit 0: overflow// bit 13: conter// bit 1~3: counter// bit 4: IRQ status// …注释例子注释例子void example_fun(void) { // code one comments 使用和代码相同的缩进do_a();do_b();的缩进}void examplefun(void) p_(){ // code one comments do_a();do_b();}注释例子void example_fun(void) { 注释例子intn;for (n=0; n32; n++){{…switch(state){{case A:…;break;break;case B:;…;break;default:…;break;} // switch(state)}()} // for (n=0; n32; n++)}模板(文件头)模板(文件头)/***************************************************/***************************************************Copyright (C), 20xx‐20xx, xxx GroupFile name:xxxDescription: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx总体Description: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxFunction List:总体描述Function List:func1: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxfunc2: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx主要函数描述History:Author: xxx Version: xxx Date: xxx Email: xxxDescription: Create数描述修改记录描述pAuthor: xxx Version: xxx Date: xxx Email: xxxDescription: Fix xxx bugs录描述***************************************************/ 模板(函数头)模板(函数头)/************************************************* /************************************************* Name: xxxx(函数名称)De
本文标题:C语言编程规范和约定
链接地址:https://www.777doc.com/doc-4669417 .html