C语言的编码规范

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34778691/article/details/68951159


个人编码模板

                c/c++语言编程模板

代码总体原则:

<1>清晰第一

  清晰性是易于维护,易于重构的程序必须具备的特征。

<2>简洁为美

  简洁就是易于理解并且易于实现,废弃的代码及时清除,重复的代码应该尽可能提炼成函数。

<3>选择合适的风格,与代码原有的风格保持一致

  如果重构/修改其他风格 的代码时,比较明智的做法是根据现有代码的现有风格继续编写代码。

程序排版:

1.程序块要采用缩进风格进行编写,缩进的空格数为4.

2.较长的语句(>80字符)要分成多行书写。

3.循环、判断等语句中若有较长的表达式或者语句,则要进行适当的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。

if ((taskno < max_act_task_number) 

&& (n7stat_stat_item_valid (stat_item)))

{

    ... // program code

}  

for (i = 0, j = 0; (i < BufferKeyword[word_index].word_length)

              && (j < NewKeyword.word_length); i++, j++)

{

    ... // program code

}

4.不允许把多个短语句写在一行中,即一行只写一条语句。如下则不符合规范。

Int a=0; int b=0;

5.If,for,do,while,case,switch,default语句自成一行时,则if,do,while,for语句等执行语句部分无论多少都要加括号{}

6.函数或过程的开始,结构的定义及循环和判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。

注释:

1.一般情况下,源程序有效注释量必须在20%以上。

说明:注释的原则是有助于对程序的阅读理解,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。

2.注释的内容要清楚、明了,含义准确,防止注释二义性。

说明:有歧义的注释反而会导致维护者更难看懂代码,正如带两块表反而不知道准确时间。

3.修改代码时,维护代码周边的所有注释,以保证注释与代码的一致性。

说明:不再有用的注释要删 除。 说明:不要将无用的代码留在注释中,随时可以从源代码配置库中找回代码;即使只是想暂时排除代 码,也要留个标注,不然可能会忘记处理它。

4.文件头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者姓名、工号、内 容、功能说明、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。

说明:通常头文件要对功能和用法作简单说明,源文件包含了更多的实现细节或算法讨论。 版权声明格式:Copyright © Huawei Technologies Co., Ltd. 1998-2011. All rights reserved. 1998-2011根据实际需要可以修改, 1998是文件首次创建年份,而2011是最新文件修改年份。

示例:下面这段头文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。/*************************************************   Copyright © Huawei Technologies Co., Ltd. 1998-2011. All rights reserved.

File name:               // 文件名   

Author:  IDVersion: Date: // 作者、工号、版本及完成日期   

Description:    // 用于详细说明此程序文件完成的主要功能,与其他模块                   

// 或函数的接口,输出值、取值范围、含义及参数间的控                   // 制、顺序、独立或依赖等关系   

Others:         // 其它内容的说明   

History:        // 修改历史记录列表,每条修改记录应包括修改日期、修改                   

// 者及修改内容简述

5.注释应放在其代码上方相邻位置或右方,不可放在下面。如放于上方则需与其上面的代码用 空行隔开,且与下方代码缩进相同。 示例:

/* active statistic task number */

#define MAX_ACT_TASK_NUMBER 1000  

#define MAX_ACT_TASK_NUMBER 1000 /* active statistic task number */

可按如下形式说明枚举/数据/联合结构。

 /* sccp interface with sccp user primitive message name */ enum SCCP_USER_PRIMITIVE

{     N_UNITDATA_IND, /* sccp notify sccp user unit data come */     

       N_NOTICE_IND, /* sccp notify user the No.7 network can not transmission this message */     

       N_UNITDATA_REQ, /* sccp user's unit data transmission request*/

}

6.避免在一行代码或表达式的中间插入注释。

说明:除非必要,不应在代码或表达中间插入注释,否则容易使代码可理解性变差。

7.在代码的功能、意图层次上进行注释,即注释解释代码难以直接表达的意图,而不是重复描 述代码。

说明:注释的目的是解释代码的目的、功能和采用的方法,提供代码以外的信息,帮助读者理解代码, 防止没必要的重复注释信息。对于实现代码中巧妙的、晦涩的、有趣的、重要的地方加以注释。注释不是为了名词解释(what),而是说明用途(why)。

示例:如下注释纯属多余。

++i; /* increment i */

if (receive_flag) /* if receive_flag is TRUE */

其他:

1.头文件

1.1禁止头文件循环依赖

1.2.c/.h文件禁止包含用不到的头文件

1.3禁止在头文件中定义变量

2.函数

2.1一个函数仅完成一个功能

2.2 重复代码应该尽可能提炼成函数

  重复代码提炼成函数可以带来维护成本的降低。

2.3废弃代码(没有被调用的函数和变量)要及时清除。

2.4 函数的参数个数不超过5

  函数的参数过多,会使得该函数易于受外部(其他部分的代码)变化的影响,从而影响维护工 作。函数的参数过多同时也会增大测试的工作量。

3.标识符命名与定义

  通用命名规则

  单词用小写字母,每个单词直接用下划线_‟分割,例如text_mutex, kernel_text_address

  3.1 标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写, 避免使人产生误解。好的命名:int error_number,不好的命名:使用随意的字符。如int nerr

  3.2除了常见的通用缩写以外,不使用单词缩写,不得使用汉语拼音。较长的单词可取单词的头几个字母形成缩写,一些 单词有大家公认的缩写,常用单词的缩写必须统一。

举例:argument 可缩写为 arg

      clock 可缩写为 clk

      configuration 可缩写为 cfg

      maximum 可缩写为 max

      minimum 可缩写为 min

      temp 可缩写为 tmp

3.3 用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。

add/remove         begin/end          create/destroy

insert/delete   first/last    get/release increment/decrement    put/get          add/delete 

实例模板:

//文件名:顺序表插入及求表长.cpp

//作者: Vector_山水之间

//学号:1508010333

//版本:20160506.1.0

//完成日期:2016.5.6

//主要功能:完成顺序表的 插入和求表长的操作

#include<stdio.h>  
#define MAXSIZE 100  
typedef int ElemType;  
typedef struct            //定义顺序表结构  
{  
<span style="white-space:pre">  </span>ElemType list[MAXSIZE];  
    int last;  
}SeqList;  
  
void InitList(SeqList *L)  //定义初始表的函数  
{  
    L->last=-1;  
}  
void PutseqList(SeqList *L,int n) //定义初始输出函数  
{  
    int i;  
    for(i=0;i<n;i++)  
        scanf("%d",&(L->list[i]));  
    L->last=L->last+n;  
}  
int LengthList(SeqList *L)    //定义求表长的函数  
{  
<span style="white-space:pre">  </span>int Len;  
    Len=L->last+1;  
    return Len;  
}  
int PositionList(SeqList *L,int X)  //定义位置确认函数  
{  
    int j;  
    for(j=0;j<=L->last;j++)  
        if(X<L->list[j])  
        <span style="white-space:pre">  </span>return j+1;  
    return (L->last+2);  
}  
int InsertList(SeqList *L,int i,int e) //定义插入函数  
{  
    int k;  
    if((i<1)||(i>L->last+1))  
    {  
        printf("插入位置不合理");  
        return 0;  
    }  
    if(L->last>=MAXSIZE-1)  
    {  
        printf("表已满无法插入");\  
        return 0;  
    }  
    for(k=L->last;k>=i-1;k--)  
        L->list[k+1]=L->list[k];  
    L->list[i-1]=e;  
    L->last++;  
        return 1;     
}  
//定义经过插入操作后的输出函数  
int OutputSeqList(SeqList *L) //定义经过插入操作后的输出函数函数  
{  
    int i;  
    printf("输出结果为:");  
    for(i=0;i<=L->last;i++)  
        printf("%d ",L->list[i]);  
    return(L->list[i]);   
}  
int main()                     //主函数  
{  
    int s,c;  
    SeqList L;  
    InitList(&L);  
    printf("请输入顺序表长度:");  
    scanf("%d",&s);  
    printf("请输入递增顺序表:");  
    PutseqList(&L,s);  
    LengthList(&L);  
    printf("表长为%d\n",LengthList(&L));  
    printf("请输入要插入的元素:");  
    scanf("%d",&c);  
    InsertList(&L,PositionList(&L,c),c);  
    OutputSeqList(&L);  
    printf("\n");  
    return 0;  
}  



猜你喜欢

转载自blog.csdn.net/qq_34778691/article/details/68951159