0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

对于代码规范的一些总结

GReq_mcu168 来源:玩转单片机 2019-12-08 10:21 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作为一个程序员,肯定希望能写出一手好代码,看起来赏心悦目,又易于理解。虽说好的代码是在一定代码量的基础上积累起来的,但在写代码之初就应该有意识地去遵循一定的规范。

以下是两位工程师对于代码规范的一些总结,很有代表性,分享给大家。+



代码不是一次性的,要为未来写代码

最近的几件事情让我对代码规范的重要性有了更深的体会,决定自己做些总结。
情景一:一个不大的项目,由几个人共同完成。某日,由于业务需求变更,需要改动我这边的部分逻辑,但当时我不在,项目组的成员决定由他们来改,但翻了我的代码,硬是没找到该逻辑在哪实现的^_^。后来听了他们的描述,很伤……
情景二:负责一个项目的源代码流程测试,一期代码并非模块化实现,6K多的shell脚本即使有注释,看着那个头疼,后来在我们提出该问题后,开发重新进行了设计和规范,拿到代码的那一刻顿时感觉清晰多了。
都说代码是程序员的第二张脸,长时间下来,写的好的代码定会受到大家的尊重。遵循一些简单的规范,写干净一致的代码!把个性用在写出最简单易懂的代码上面,而不是晦涩冗余无用的代码,甚至自我签名!设计良好的结构和模式,撰写干净易懂的代码,对空间的尊重,对代码的尊重。这样能赢得别人的尊重!记住代码不是一次性的,需要重复的修改和重构,为未来写点代码!
1,写干净整洁的代码
1.1 代码格式化,包括多级代码缩进、大括号(比如C系代码),为了提高代码的美观型和易读性,区间与区间之间最好以一行*或-之类的间距;
1.2 合理运用空行。空行可以用来隔开相对独立的代码块,有利于阅读和理解。但是不要使用超过一行的空行,对空间,别太奢侈了;
2,命名规范命名包括函数、变量、类(面向对象中)、命名空间等;
2.1命名需要遵循由其命名便知道其意义的原则; 变量命名区分全局变量、导出变量、常量、局部变量,最好区分类型(如果有的话);
2.2 可采用业界的一些命名规范,比如匈牙利命名,但同一个项目必须统一;
3,高效使用注释
3.1 注释代码段,注释逻辑选择。上面提到运用空行分割开逻辑相对独立的代码,那么请在空行的下一行也写点下面代码段要干什么的语句吧。如果有if else等逻辑选择的时候,麻烦也花几秒钟写上判断的依据和结果好吗?逻辑难懂且关键,您懂的!
3.2 为不容易理解类变量注释。类变量特别是私有的类变量没有人要求注释,但是为了能够快速的了解您表示的是什么,还是写点什么吧!您知道我英文不算好!
3.3 独立的代码模块、文件、函数需要撰写注释以说明其实现意图、原理、怎么使用等(比如函数的输入输出参数等),独立的代码文件和模块(比如类)最好写上作者、日期、联系方式、版本号等信息,以便后期做追踪;
3.4 并不是注释越多越好,相反,完全模块化、结构化的程序很多地方注释完全可以精简;
4,程序结构化、模块化
4.1 程序设计中有很多原则、设计模式,不同的语言、不同的情景可能会有些差异,但整体需要支持高类聚、低耦合的设计实现方案;
4.2 养成写开发文档的习惯。对于每一个页面设计(前接页,后接页),包括功能说明,页面设计,页面名称,存放位置等,应当有相应的文档记载。对于发生改动的地方,需要保留原来的部分(注释或备份),并说明备份文件存放的地方,改动时间,修改人;对于程序部分,应该有相应的设计流程,改动的时候,也需要设计改动流程图,以便以后进行对比,和查找问题所在位置,以及问题的严重性分析。
4.3 始终要记住的是你写出的代码并不是给你一个人看的,你需要保证你的代码清晰、一致,别的程序员能够读懂,团队里面最好定期有code review环节。
5,多读优秀的源代码、多实践
5.1 看别人代码时要汲取好的方法和技巧。
5.2 接触一项技术要深入了解和实践,请问您做过的系统您现在都可以从零开始搭建起来了吗,我的意思是架构搭建哦!(以上部分内容摘自https://blog.csdn.net/bullbat/article/details/9265351,作者:bullbat)

代码写多了,总结出适合自己的代码风格
1、类型的宏替换1)要求要求用“#ifndef”判断是否之前被定义过。2)举例

#ifndef GUA_U8

typedef unsigned char GUA_U8;

#endif

#ifndef GUA_U16

typedef unsigned short GUA_U16;

#endif

#ifndef GUA_U32

typedef unsigned long GUA_U32;

#endif

2、宏定义1)要求①宏全为大写的英文字母。 ②宏的名称应能读出其功能作用。2)举例

#define GUA_RF_COMMUNICATION_JUDGMENT_FALSE 0

#define GUA_RF_COMMUNICATION_JUDGMENT_TRUE 1

3、变量1)要求①变量名称前的字母含义要求如下 g:global全局。 a:array数组。 s:static静态。 c:const不变常数。 n:变量。 p:指针。 ②变量的名称应能读出其功能作用。2)举例

GUA_U8 gaGUA_USART1_rx_buf[GUA_USART1_RX_SIZE] = {0};//全局数组

GUA_U8 gnGUA_USART1_rx_buf = 0;//全局变量

GUA_U8 nGUA_USART1_rx_buf = 0;//局部变量

static GUA_U8 snGUA_USART1_rx_buf = 0;//静态变量

const static GUA_U8 csnGUA_USART1_rx_buf = 0;//const类型的静态变量

GUA_U8 *gpGUA_USART1_rx_buf; //全局指针

3、if1)要求①“{”与“}”要对齐。 ②if与else的上方要注释。2)举例

//如果计数值大于10,则返回true

if(nGUA_Num > 10)

{

return true;

}

//如果计数值小于10,则返回false

else

{

return false;

}

4、switch1)要求①switch、case、default上都要注释。 ②每种情况的具体处理由“{}”包含。2)举例

//如果为0则关灯

switch(nbGUA_Char6[3])

{

//关灯

case 0x00:

{

P1_1 = 0; //拉低P11

P1SEL &= ~(1 << 1); //设置P11为IO口

P1DIR |= (1 << 1); //设置P11为输出

break;

}

//开灯

case 0x01:

{

P1_1 = 1; //拉高P11

P1SEL &= ~(1 << 1); //设置P11为IO口

P1DIR |= (1 << 1); //设置P11为输出

break;

}

//其它

default:break;

}

5、文件及函数注释1)文件注释要求至少要包含文件名称、文件作用说明、编码人、最后修改时间。2)函数注释要求至少要包含函数名称、函数作用说明、形参含义、返回值含义、编码人、最后修改时间。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4423

    浏览量

    67880
  • 代码
    +关注

    关注

    30

    文章

    4977

    浏览量

    74425

原文标题:如何写出好代码?附资深码农的个人代码规范

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何使用 powerquad 加速器中的一些功能以及 CMSIS 原始实现中的一些功能?

    )。 如何使用 powerquad 加速器中的一些功能以及 CMSIS 原始实现中的一些功能。 Example: I do not want to call arm_mat_trans_q15 powerquad
    发表于 04-03 06:37

    S32 Design Studio 有一些代码文件示例,但它在本地计算机中不存在,为什么?

    S32 Design Studio 有一些代码文件示例,但它在本地计算机中不存在。
    发表于 03-17 07:28

    【「龙芯之光 自主可控处理器设计解析」阅读体验】+可测试性设计章节阅读与自己的一些感想

    作为嵌入式底层开发,对第四章可测试性的内容比较感兴趣,因为嵌入式底层开发如何测试是个很重要的内容,一些芯片的可测试性设计做得很好,就更方便调试与查找问题有开发。 所以就来阅读下本章,分享下书中内容
    发表于 01-15 23:30

    爬壁机器人磁铁的一些常见问题

    爬壁机器人近几年比较火,它是类能够在垂直墙面、天花板、倾斜表面上移动和作业的特种机器人,今天我们不聊其它,只聊下关于磁吸附应用中的磁铁,以下是小编整理的关于爬壁机器人中磁铁的一些常见问题。
    的头像 发表于 01-09 10:06 468次阅读
    爬壁机器人磁铁的<b class='flag-5'>一些</b>常见问题

    【「玩转高速电路:基于ANSYS HFSS的无源仿真实例」阅读体验】+本书概览,内容,特点,问题,与一些个人建议

    的罗列,那么书籍的价值就大大降低了, 这些基本操作看软件文档,搜索网络即可获取,所以出书还是要有一些样的东西,要有作者自己的思考,总结,经验,理论等层次的介绍。 缺乏必要的概念,理论,背景的介绍
    发表于 01-05 12:28

    C语言中一些令人震惊的结构介绍

    C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么? int a = 5, b = 7, c; c = a+++b; 考察点: 这个问题将作为这个测验的个愉快的结尾
    发表于 12-23 08:15

    关于六类网线一些问题的解答

    今天我们就围绕网友一些常见的关于六类网线的问题进行下汇总式解答: 问 六类网线可以当电源用吗? 答 六类网线并不是设计用于传输电力的电缆,因此般不建议将其用于电源传输。 尽管六类网线的线芯可以
    的头像 发表于 12-09 11:13 791次阅读

    贴片电容精度J±5%的一些详细知识

    贴片电容精度J±5%表示电容的实际值与标称值之间的偏差范围在±5%以内 ,以下是关于贴片电容精度J±5%的一些详细知识: 、精度等级含义 J±5% :字母“J”在贴片电容的标识中通常表示标称精度
    的头像 发表于 11-20 14:38 1024次阅读
    贴片电容精度J±5%的<b class='flag-5'>一些</b>详细知识

    如果将蜂鸟的risc-v移植到其他的fpga中想实现一些外设功能有什么办法?可以不用操作系统直接添加verilog代码吗?

    请问如果将蜂鸟的risc-v移植到其他的fpga中想实现一些外设功能有什么办法?可以不用操作系统直接添加verilog代码吗?
    发表于 11-10 06:35

    对浮点指令扩展中一些问题的解决与分享

    出现无法写的情况。 结论 以上就是我们组在扩展浮点指令中出现的一些问题,这些问题总体上归结于对蜂鸟的代码没有整体性的把握,对内容的掌握程度还不够。在后续的工作中应注意理清功能的整体架构而对所有的相关部分进行修改。
    发表于 10-24 11:47

    蜂鸟E203的浮点指令集F的一些实现细节

    周期。 总结 本文介绍的内容是为了完成基础功能:对蜂鸟E203 RISC-V内核的微架构实现进行定优化,在添加F拓展的过程中的一些记录。
    发表于 10-24 08:57

    Vivado浮点数IP核的一些设置注意点

    总结 本文介绍的内容是为了完成基础功能:对蜂鸟E203 RISC-V内核的微架构实现进行定优化,在添加F拓展的过程中的一些记录。
    发表于 10-24 06:25

    求助,关于TC387使能以及配置SOTA 中一些问题求解

    你好, 之前我拿到贵司给个demo,里面有一些使能以及配置SWAP的代码, 这里有些疑问 问题1. 判断SOTA功能是否生效,demo中使用的是 SCU_STMEM1中的bit位, 代码
    发表于 08-08 07:31

    基于STM32 HAL库与标准库的ESP8266接入机智云方案(

    新手。在实际的开发和移植过程中,还是会遇到不少问题,当前机智云平台自动生成的代码与网上的一些旧的教程有差异。现在,我将自己成功的开发经验总结出来,手把手教大家如何进
    的头像 发表于 05-28 18:02 1363次阅读
    基于STM32 HAL库与标准库的ESP8266接入机智云方案(<b class='flag-5'>一</b>)

    Debian和Ubuntu哪个好一些

    兼容性对比Debian和Ubuntu哪个好一些,并为您揭示如何通过RAKsmart服务器释放Linux系统的最大潜能。
    的头像 发表于 05-07 10:58 1448次阅读