热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

做到这些细节,就是高质量C代码!

网传,C语言就像是至尊魔戒,所有人都知道它的力量,每个人都想获得它的力量,它是编程语言的通用语,也是世界上最古老、应用最广泛的语言之一。而C++则是指环王中的萨茹曼,每一个人都认为他是好人,但你一旦了解他,你会意识到他只想要力量,而非善行。是C语言的难度5星的高复杂版本,自带大神光环。那么问题来了,如何才能利用魔戒的威力,在获取力量的道路上一往无前,成为一位德高望重的大神?

网传,C语言就像是至尊魔戒,所有人都知道它的力量,每个人都想获得它的力量,它是编程语言的通用语,也是世界上最古老、应用最广泛的语言之一。

做到这些细节,就是高质量C代码!

而C++则是指环王中的萨茹曼,每一个人都认为他是好人,但你一旦了解他,你会意识到他只想要力量,而非善行。是 C语言 的难度5星的高复杂版本,自带大神光环。

做到这些细节,就是高质量C代码!

那么问题来了,如何才能利用魔戒的威力,在获取力量的道路上一往无前,成为一位德高望重的大神?

C/C++码农的日常三问:

什么是高质量的 C/C++ 代码?

C/C++ 码农中高手和菜鸟的差别在哪里?

在追寻成为大神的道路上,我们是否可以有他山之石?

C/C++ 代码质量的定义也许每个码农,每个项目组,每个部门,每个公司都有着不同的规格定义,乃至会形成不同标准的规范文档。不过最终应该逃不掉功能正确健壮可靠,性能安全易用高效这几个特性的。大神与菜鸟代码的差异也在这些特性中得以体现出来,能长期稳定地码出高质量代码的 程序员 就是我们定义的大神。

高质量的 C/C++ 代码需要良好得编程规范,其生成的代码不仅要容易阅读理解,而且要易于调试测试。下面从排版,注释,命名,可读性等方面举例说明下高质量 C/C++ 代码的编码规范。

1 排版

不允许把多个短语句写在一行中,即一行只写一条语句。菜鸟与大神的区别:

做到这些细节,就是高质量C代码!

2 注释

文件头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、修改日志等。

/*****************************************************************************

Copyright: 1995-2019, Hundsun Technologies Inc.

File name: 文件名

Description: 用于详细说明此程序文件完成的主要功能,与其他模块或函数的接口,输出值、取值范围、含义及参数间的控制、顺序、独立或依赖等关系

Author: 作者

Version: 版本

Date: 完成日期

History: 修改历史记录列表,每条修改记录应包括修改日期、修改者及修改内容简述。

*****************************************************************************/

注释应考虑程序易读及外观排版的因素,出于对维护人员的考虑,建议使用中文。

3 标识符命名

命名规范必须与所使用的系统风格保持一致,并在同一项目中统一,比如采用 UNIX 的全小写加下划线的风格或大小写混排的方式,不要使用大小写与下划线混排的方式,用作特殊标识如标识成员变量或全局变量的 m_ g_ ,其后加上大小写混排的方式是允许的。

菜鸟与大神的区别:

做到这些细节,就是高质量C代码!

4 可读性

不要使用难懂的技巧性很高的语句,除非很有必要时。高技巧语句不等于高效率的程序,实际上程序的效率关键在于算法。示例:

做到这些细节,就是高质量C代码!

5 函数

功能:一个函数仅完成一件功能,不要设计多用途面面俱到的函数。多功能集于一身的函数,很可能使函数的理解、测试、维护等变得困难。

分支:函数分支要健全, if 语句必须加上 else 分支, switch 语句必须有 default 分支。

异常:函数出错处理尽可能完善,返回值要准确明了,报错信息尽可能详细。

效率

在保证软件系统的正确性、稳定性、可读性及可测性的前提下,提高代码效率。局部效率应为全局效率服务,不能因为提高局部效率而对全局效率造成影响。

大神可以码出高质量的代码,但现代社会中人们关注的已经不仅仅只是代码的质量了,而是讲究性价比了。什么是高性价比的代码呢?那就是在提高代码质量的同时并降低生产代码的成本。这就要求菜鸟也可以蜕变成为大神,码出大神级的代码,从而实现鱼与熊掌可以得兼的目标。那菜鸟应该做些什么才可以码出媲美大神级的代码呢?按照大神的标准,勤学苦练多积累是肯定没错的,但我给另外一个终南捷径就是:学会使用工具。

传说中远古的大神是这样工作的:操作系统坏了,需要重新编写,把电话线插入网卡,进入DOS模式不停地按着 0、1按键。

2个小时之后……操作系统写好了!

做到这些细节,就是高质量C代码!

现代的大神们估计很难达到这个高度了,且现在程序员需求高,为保证平均效率,使用 工具 成为日常的必须。这也就促进来各大工具的多样化发展,只依靠大脑与双手裸奔的远古大神时代终结,开启了标准程序库与IDE开发工具的黄金时代。

深度进阶——码农的黄金时代

标准程序库和集成开发工具( IDE )(代码编辑器 编译器 连接器 解释器 调试器 图形用户界面)的使用是 码农 进入黄金时代的标志,意义相当于人类学会了钻木取火。标准程序库,让千锤百炼后得到验证的代码得到复用, 避免重复劳动,提高工效。 IDE 这个词和一些没有关连性的命令行工具(像 vi emacs make )是一种对照,这个 IDE 提供许多的功能,例如:制作、修改、编译、发布、调试。 IDE 的想法是把各种命令行的开发工具结合起来,提供一个抽象化的工具,来减少学习编程语言的时间,增加开发人员的生产力, 让开发更加快捷方便,通过提供工具和各种性能来帮助开发者组织资源,减少失误,提供捷径。

拥有标准程序库与 IDE 环境的程序员就跟拥有新鲜食材和厨神套装的厨子一样了,只有经过厨师长过目的菜才可以上桌,只有经过审核和优化的代码才有会走到下一个步骤的资格。人工审核和优化是有必要的,但是由于人员素质和主观因素对代码质量造成的影响很大,所以使用工具对码出来的代码进行静态代码检查和动态代码分析成为了高质量代码的必经阶段。

静态代码检查是指无需运行被测代码,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。目前市场上的 C/C++  静态代码分析工具种类繁多且各有千秋 , 当前 4 种主流 C/C++ 静态代码分析工具是 cppcheck coverity clang pclint 。统计证明,在整个软件开发生命周期中, 30%   70%  的代码逻辑设计和编码缺陷是可以通过静态代码分析来发现和修复的。所以 C++  静态代码分析工具能够帮助开发人员快速、有效的定位代码缺陷并及时纠正这些问题,从而极大地提高软件可靠性并节省开发成本。

与静态分析相反,动态分析是通过在真实或虚拟处理器上执行该软件构建的程序来执行的。一般是通过观察程序在运行过程中的状态,如寄存器内容,函数执行结果,内存使用情况等等,分析函数功能,明确代码逻辑,挖掘可能存在的漏洞。通过动态分析数据流,构造特殊输入数据来触发程序的潜在错误,对比运行得到的结果与期望获得的结果之间的差别,以便确定目标函数在安全方面有没有存在缺陷,并对比分析所得到的结果。目前市场上的 C/C++ 的动态代码分析工具也数不胜数,根据不同的需求使用不同的工具达到其目的,主要有 gdb,  olldbg, valgrind等。

这样通过各种工具的摧残蜕变后的代码无限接近或者达到高质量的代码的标准了,还减少因为人员素质等主观因素对代码质量的影响,同时提高了码代码的效率,实现了鱼和熊掌得兼的目标。菜鸟也可以通过对工具的使用逐步迈向大神。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 我们


推荐阅读
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
author-avatar
雲痕影落_969
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有