---恢复内容开始---

  使代码容易理解的方法无非是准确地注释和增强代码一致性。

  一个好的准确的注释让代码容易理解是显然的。而代码的一致性,使编程风格统一,容易在内部形成一些共识、习惯用语和模式。

  一、对代码进行注释再怎么强调也不过分。

(1)通用规则:

  注释是对代码功能的描述,代码则是对注释的实现,它们应该是一致的。

  使用准确的英文表达最好。 

    如果确实需要在代码中使用新的缩写,新引入的缩写必须在文件头部加以说明。

  注释格式尽量统一。建议使用//进行单行注释,多行注释可使用“/* …… */”。

(2)文件注释:

  源文件(包含.h头文件、.c源文件及各种脚本文件等)头部应进行注释,应列出:版权说明、文件名、文件目的/功能,作者、创建日期等;如果源文件引入了新的缩写,则必须在文件头部注释说明。

  文件注释格式定义如下(可以不局限于该格式中定义的内容,但必须包含该格式中定义的内容):

/************************************************************
** Copyright (C) 2016-2017, XXX
** All rights reserved.
**
** FileName: // 文件名称
** Description: // 文件描述
** Author: // 作者
** Date: // 创建时间
** Others: // 其它说明
***********************************************************/ /************************************************************
Abbreviation: // 如果文件引入了新的缩写,则必须在此处加以说明
***********************************************************/

(3)函数注释:

   函数头部应进行注释,需要列出函数的功能、参数、返回值等。函数注释格式定义如下(可以不局限于该格式中定义的内容,但必须包含该格式中定义的内容):

/****************************************************************
Function: // 函数名称
Description: // 函数功能描述
Param: // 参数说明,包括参数的作用、取值范围等,格式如下:
param1: 输入输出类型[IN/OUT/INOUT] 说明
param2: 输入输出类型[IN/OUT/INOUT] 说明

Return: // 函数返回值说明
Others: // 其它说明
Author: // 作者
****************************************************************/

(4)数据注释:

  对于所有有物理含义的变量、常量,如果其命名不是充分自注释的,在声明时都必须加以注释,说明其物理含义。变量、常量、宏的注释应放在其上方相邻位置或右方。

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

  数据结构声明(包括结构体、枚举、类等),如果其命名不是充分自注释的,必须加以注释。对数据结构的注释应放在其上方相邻位置;对结构中每个域的注释放在该域的右方。

//FLAGs used to Identify the block type
enum BLOCK_FLAG_ENUM
{
BLOCK_FLAG_FIRMWARE = , //Firmware Block
BLOCK_FLAG_BLOCK_ALLOC = , //Block Allocation Information
BLOCK_FLAG_FACTORY_BAD_BLOCK = , //Factory Bad Block Table
BLOCK_FLAG_NEW_BAD_BLOCK = , //Bad Block Table and Remap Table
BLOCK_FLAG_BOOT_A = , //Block of Boot LU A
BLOCK_FLAG_BOOT_B = , //Block of Boot LU B
BLOCK_FLAG_RPMB = , //Block of LU RPMB
BLOCK_FLAG_SLC_SYSTEM = , //Block For Sytem Data such as Map
BLOCK_FLAG_SLC_CACHE = ,//Block for Data Cache
BLOCK_FLAG_TLC = ,//Normal Data Block
BLOCK_FLAG_END //Not USED, Please Keep it at the last
};

  全局变量必须有注释,包括对其功能、取值、及其他注意事项等的说明。

//The Number of commands that is pending for handling
Uint8 gCmdPendingNum = ;

(5)代码注释:

  边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。无用的过时的注释一定要删除!

   注释应与其描述的代码相邻。对语句块的注释必须放在语句块上方;对单条语句、变量定义的注释可以放在上方或右方(建议放在右方);注释不可放在下方。

//The Number of commands that is pending for handling

Uint8 gCmdPendingNum = ;    不良写法一,注释与代码之间有空行
______________________________________________________________________________________________________
Uint8 gCmdPendingNum = ;
//The Number of commands that is pending for handling 不良写法二,注释在代码下面
______________________________________________________________________________________________________
//The Number of commands that is pending for handling
Uint8 gCmdPendingNum = ; 良好的写法

  如果注释放在上方,则将注释与其上面的代码用空行隔开。

// code one comments

program code one

// code two comments

program code two

//code one comments

program code one

// code two comments

program code two

                  过于紧凑                          建议写法

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

  对于switch语句下的case语句,如果因为特殊情况需要处理完一个case后进入下一个case处理,必须在该case语句处理完、下一个case语句前加上明确的注释。

说明:这样比较清楚程序编写者的意图,有效防止无故遗漏break语句。

case CMD_A:
ProcessA();
break; case CMD_B:
ProcessB ();
// Fall through to case CMD_C case CMD_C:
ProcessC();
break;

  注释与所描述内容进行同样的缩排。说明:可使程序排版整齐,并方便注释的阅读与理解。

void Example_Fun( void )

{

//code one comments

CodeBlock One

//code two comments

CodeBlock Two

}

void Example_Fun( void )

{

// code one comments

CodeBlock One

// code two comments

CodeBlock Two

}

            不好的注释缩排                              良好的注释缩排

二、命名

(1)通用命名规则

   标识符的命名要清晰明了,有明确含义;命名应具有描述性;一般而言,类型和变量应是名词,函数应是“命令性”动词;

   命名应使用使用完整的单词或大家可以理解的缩写,避免使人产生误解;如使用特殊约定或缩写,要有注释说明,可参见【规则2-1-5】;需注意避免过度缩写。当然约好的缩写除外

//良好命名

uint32 numError;

uint32 numConnections;

//过度缩写

uint32 nErr;

uint32 nConns;

(2)文件命名

文件名全部小写;为避免由于文件名过长造成难以理解,可以在适当位置使用下划线进行分隔。

不良的文件命名:

mmieventmanager.h(过长难以理解)

Star_HttpServer.h(大写字母)

良好的文件命名:

mmi_applet_table.h

mmicc_speeddial.c

(3)类型命名

  结构体(struct)类型名遵循如下规则:全部字母大写,单词间使用下划线相连,以_S后缀结束;命名中的前缀、关键缩写词等可以适当的采取全部大写。

  struct的typedef类型定义名遵循如下规则:和struct名采用相同命名,以_T后缀结束。一般而言,struct需同时定义类型名和typedef名,推荐同时为其定义指针类型。也可以不定义struct类型名

typedef struct FIFO_S  //_S表示 struct
{

} FIFO _T, *pFIFO_T;
或者
typedef struct
{

}FIFO_T, *pFIFO_T;

  枚举(enum)类型名遵循如下规则:全部字母大写,单词间使用下划线相连,以_ENUM后缀结束。

  enum的typedef类型定义名遵循如下规则:和enum名采用相同命名,但全部字母大写,单词间使用下划线相连,并以_E后缀结束。

  一般,enum无需定义类型名,仅需定义typedef名。

typedef enum BLOCK_FLAG_ENUM
{

} BLOCK_FLAG_E;
或者
typedef
{

} BLOCK_FLAG_E;

(4)变量命名

  局部变量、全局变量、参数变量、成员变量,变量名使用驼峰命名法,首字母一律小写,从第二个单词开始首字母大写。

不良的命名:

uint8 * strtable;   //没有采用驼峰命名法

推荐的命名:

AW_LCD_PARAM_T lcdParam;

uint8 phoneNum[10];

  静态全局变量建议使用s前缀,普通全局变量使用g前缀。指针型的变量前面加p前缀,复合前缀都用小写字母。

ATC_INFO_T           gAtcInfoTable[10];  //普通全局变量

static BOOLEAN       sBatteryStatus;      //静态全局变量

uint8 * pStrTable; //指针型变量

static uint32 * spReturnAddress; //静态全局指针

uint32 * gpInputCommand; //普通全局指针

    单个字符的变量名(如i、j、k等)仅用作局部循环变量。

单个字母唯一可使用的场合:

for (i = 0; i < max; i++)

{

}

(5)常量命名

常量名全部字母大写,单词间用下划线隔开。

const float     PI = 3.14;

const int       VAL_MIN = 1;

(6)函数命名

  函数名中每个单词首字母大写;为避免由于函数名过长造成难以理解,可以在适当位置使用下划线进行分隔;命名中的前缀、关键缩写词等可以适当的采取全部大写。

不建议的命名:

charge_init();  //未采用正确的大小写规则

FEProcessReadCommand(); //函数名太长且没有分隔,造成理解困难

建议命名:

Charge_Init();

FE_ProcessReadCommand ();  //加适当的分隔

(7)枚举命名

  枚举值全部大写,单词间使用下划线相连;枚举类型定义参见

(8)宏命名

  宏命名全部大写,单词间使用下划线相连。

FW开发代码规范---小任性(1)的更多相关文章

  1. FW开发代码规范---小任性(2)

    三.空行 (1)在每个函数.结构体.枚举定义结束之后都要加空行. 在一个函数体内,逻辑密切相关的语句之间不加空行,其它地方应加空行分隔. struct st1 { - }; // 空行 enum { ...

  2. Android开发代码规范(转)

    Android开发代码规范 1.命名基本原则    在面向对象编程中,对于类,对象,方法,变量等方面的命名是非常有技巧的.比如,大小写的区分,使用不同字母开头等等.但究其本,追其源,在为一个资源其名称 ...

  3. web前端开发 代码规范 及注意事项

    web前端开发 代码规范 及注意事项 外部命名规范 html .js .css文件名称命名规范 my_script.js my_camel_case_name.css my_index.html 路径 ...

  4. Web 前端开发代码规范(基础)

    一. 引言 对于一个多人团队来说,制定一个统一的规范是必要的,因为个性化的东西无法产生良好的聚合效果,规范化可以提高编码工作效率,使代码保持统一的风格,以便于代码整合和后期维护. 二. HTML/CS ...

  5. Android开发代码规范

    目录 1.命名基本原则  2.命名基本规范 2.1编程基本命名规范 2.2分类命名规范 3.分类命名规范 3.1基本数据类型命名规范 3.2控件命名规范 3.3变量命名规范 3.4整个项目的目录规范化 ...

  6. Extjs4前端开发代码规范参考

    准则:  一致性, 隔离与统一管理, 螺旋式重构改进, 消除重复, 借鉴现有方案 1.    保证系统实现的一致性,寻求一致性方案, 相同或相似功能尽量用统一模式处理: 2.    尽可能使用隔离技术 ...

  7. iOS开发代码规范(通用)

    1. 关于命名 1> 统一要求 含义清楚,尽量做到不需要注释也能了解其作用,若做不到,就加注释 使用全称,不适用缩写 2> 类的命名 大驼峰式命名:每个单词的首字母都采用大写字母 例子:M ...

  8. IOS开发-代码规范

    代码风格的重要性对于一个团队和项目来说不言而喻.网上有许多 Objective-C 的代码风格,但这份简洁而又最符合苹果的规范,同时有助于养成良好的代码习惯,也是我们团队一直遵循的代码风格. 写法没有 ...

  9. iOS开发代码规范

    1.关于命名 1.1统一要求 含义清楚, 尽量做到不需要注释也能了解其作用,若做不到,就加注释 使用全称不使用缩写 1.2类的命名 大驼峰式命名:每一个单词的首字母都采用大写字母例子: MFHomeP ...

随机推荐

  1. iOS开发网络篇—NSURLConnection基本使用

    iOS开发网络篇—NSURLConnection基本使用 一.NSURLConnection的常用类 (1)NSURL:请求地址 (2)NSURLRequest:封装一个请求,保存发给服务器的全部数据 ...

  2. Positive-definite matrix

    In linear algebra, a symmetric n × n real matrix M is said to be positive definite if zTMz is positi ...

  3. 微信公众平台开发接口PHP SDK完整版(转载)

    <?php/*    方倍工作室 http://www.fangbei.org/    CopyRight 2015 All Rights Reserved*/ define("TOK ...

  4. javascript高级教程:如何优化javascript代码性能

    在web前端开发中,为实现一些动态效果,减小页面大小,我们一般都会使用JavaScript技术来进行相关设置.但是初学者在编写JavaScript代码的时候,往往都是比较低质的代码,那如何才能提高Ja ...

  5. innerHTML,innertext ,textcontent,write()

    innerhtml属于对象的一个属性,一般用于向已经存在的标签中写入内容,或者读取标签的内容. innertext属于对象的一个属性,一般只能用于写入内容,或者读取内容,不能读取dom 中的标签,且只 ...

  6. tinymce 编辑器 上传图片

    tinymce编辑器进行本地图片上传 首先下载tinymce.js之后 在form中添加一个<textarea>元素 给其一个id和name 然后就可以初始化编辑器了 tinymce.in ...

  7. 动手实现自己的 STL 容器 《1》---- vector

    本文参考了侯捷的 <STL 源码分析>一书,出于兴趣,自行实现了简单的 vector 容器. 之后会陆续上传 list, deque 等容器的代码,若有错误,欢迎留言指出. vector ...

  8. 使用POSIX正则库匹配一行中多个结果

    正则匹配与正则表达式是什么东西我就不说了,在这里说下POSIX这个c语言正则库在对字符串进行正则匹配时取出多个结果的问题. 首先简单说明下POSIX正则库的几个函数和使用方法 第一个函数:int re ...

  9. RocketMQ消费者示例程序

    转载请注明出处:http://www.cnblogs.com/xiaodf/ 本博客实现了一个简单的RocketMQ消费者的示例,MQ里存储的是经过Avro序列化的消息数据,程序读取数据并反序列化后, ...

  10. bootstrap-12

    按钮(按钮组) 使用方法:按钮组和下拉菜单组件一样,需要依赖于button.js插件才能正常运行.不过我们同样可以直接只调用bootstrap.js文件.使用一个名为btn-group的容器. < ...