当前位置: 首页 > 编程日记 > 正文

Windows客户端C/C++编程规范“建议”——前言

前言

工作中接触了很多编程规范。其中最有意思的是,公司最近发布了一版C/C++编程规范,然后我看到该规范的最后一段时,有这么一句:“该规范不适用于Windows平台开发”。看来这份规范是由做其他平台开发的同学制定的。那么做Windows开发的人都去哪儿了?后来由于工作需要,项目组需要我制定一份编程规范。这也是我这系列博客的由来。(转载请指明出于breaksoftware的csdn博客)

说到“规范“”,可能没多少人喜欢这样的东西。相信很多工程师和我一样,都喜欢互联网的一些特质:自由、兼容并包。己所不欲勿施于人,所以我制定该“规范”时,也是抱着开放的态度——在”规范“之后加了”建议“二字。之后,我都会统称这些条例为“建议”。

假如说指定“规范”是容易的(其实也不容易),那么最难的是让人遵从。一般如果我们想遵从什么,肯定要先想好我们为什么要遵从,我们遵从之有什么好处,可以给我们带来什么?同样我也是按着这个思维去制定这样的“建议”,我将会从代码的可读性、可维护性、健壮性等角度,思考和编制该“建议”。希望这些“建议”可以协助大家写出更易读、更健壮、更好看的代码。

本“建议”条例分为以下若干等级:

【必须】

编码必须遵从。

【要求】

该规则可以非常好的提高易读性、高效性和安全性。在特殊情况下,可以不遵从,但是需要给出不遵从的理由。

【推荐】

该规则可以部分提高易读性、高效性和安全性。在大部分情况下,需要遵从。

【建议】

该规则只是作为建议,代码作者可以根据自己判断来决定。

本“建议”中例子代码,使用不同底色表示代码是否存在问题:

快哭了表示代码存在问题。

微笑表示一种可以修复存在问题代码的方式。

本建议将分为以下若干模块。我会根据工作中新的发现和认识以及朋友们的建议,不定期更新这些条例。并将更新历史记录在该文的末尾,以便大家查阅。

模块:

  1. 函数 《Windows客户端C/C++编程规范“建议”——函数》
  2. 指针 《Windows客户端C/C++编程规范“建议”——指针》
  3. 函数调用 《Windows客户端C/C++编程规范“建议”——函数调用》
  4. 表达式和运算 《Windows客户端C/C++编程规范“建议”——表达式和运算》
  5. 结构 《Windows客户端C/C++编程规范“建议”——结构》
  6. 宏                         《Windows客户端C/C++编程规范“建议”——宏》
  7. 文件                     《Windows客户端C/C++编程规范“建议”——文件》
  8. 变量和常量         《Windows客户端C/C++编程规范“建议”——变量和常量》
  9. 风格                     《Windows客户端C/C++编程规范“建议”——风格》

更新历史:

时间内容备注
2014.07.18录入“建议”各项初稿


相关文章:

storm入门教程 第一章 前言[转]

1.1 实时流计算 互联网从诞生的第一时间起,对世界的最大的改变就是让信息能够实时交互,从而大大加速了各个环节的效率。正因为大家对信息实时响应、实时交互的需求,软件行业除了个人操作系统之外,数据库(更精确的说是…

Windows客户端C/C++编程规范“建议”——函数

1 函数 1.1 代码行数控制在80行及以内 等级:【要求】 说明:每个函数的代码行数控制应该控制在80行以内。如果超过这个限制函数内部逻辑一般可以拆分。如果试图超过这个标准,请列出理由。但理由不包含如下: 无法拆分。流程内部…

把自己朝九晚五的工作自动化了,有错吗?

作者 | Brian Merchant译者 | 谭开朗编辑 | 屠敏来源 | CSDN(ID:CSDNnews)【导读】用代码让自己工作开启自动化之际,是否意味着自己将面临被解雇的风险?2016年,Reddit上出现了一个匿名的帖子,内…

COM组件转换成.NET组件[转]

利用类型库导入器(Type Library Importer)可以将其包装成一个.NET组件,然后就可以像使用.NET组件一样使用它了。 .NET框架只是提供了一个包装,并没有真正改变原有的对象 1.找到要转换的.dll文件 2.在命令提示符窗口中输入.dll文件的文件路径,…

干货:Android 源码使用心得分享

我相信很多初学者会和我一样经常在网上去找Android开发源码,但是往往因为运行不起来非常的懊恼!在做爱开发网站的时候,收集App代码时就遇到了这种困难,我相信网络上面的源码大部分在发布前都会人工测试,能够正常运行才…

60分钟入门深度学习工具PyTorch

「免费学习 60 节公开课:投票页面,点击讲师头像」作者 | Soumith Chintala中文翻译、注释制作 | 黄海广配置环境:PyTorch 1.3,python 3.7,主机:显卡:一块1080ti;内存:32g…

Windows客户端C/C++编程规范“建议”——指针

2 指针 2.1 尽量使用智能指针 等级: 【推荐】说明:正确使用智能指针可以省去指针管理的工作。2.2 类成员变量指针释放后一定要置空 等级: 【必须】说明:如果类成员变量指针在释放后没有置空,将出现如下问题&#xff1…

Bug tracker .net 部署经验(完善中)

Bug tracker .net 部署经验1. 软件要求windows 2003 serverSP1IISSQL sever 2005Net framework2. 安装和配置Bug tracker .net 提供了一个readme 文件。解压安装文件至某一个目录。在SQL SERVER 2005中新建一个数据库。确保IIS工作正常。定义一个虚拟目录,将其指向安…

Windows客户端C/C++编程规范“建议”——函数调用

3 函数调用 3.1 谨慎使用递归方法 等级: 【推荐】说明:递归方式控制不当,可能会导致栈空间不够而崩溃。一般的递归都可以使用循环代替。3.2 不要使用using namespace 等级: 【必须】说明:这是曾经教科书上的一种写法&a…

“一百万行Python代码对任何人都足够了”

作者 | Jake Edge译者 | Kolen出品 | AI科技大本营(ID: rgznai100)编程语言通常对其操作过程的各个方面都有或明或暗的限制。诸如标识符的最大长度或变量可以存储的值的范围之类的事情,这些是相当明显的例子,但是还有其他一些例子…

网吧电影客户端Realplayer的装配问题

网吧电影客户端Realplayer的装配问题 作者: 出处:网吧联盟 ( 20 ) 砖 ( 22 ) 好 评论 ( 1 ) 条 进入论坛 更新时间:2005-11-24 16:54关 键 词:网吧阅读提示:一般有过开网吧经验的朋友,应当知道如何让自己的realplayer播放器支…

基于Servlet+JDBC+Bootstrap+MySQL+AJAX权限管理系统项目实战教程

项目简介 权限系统一直以来是我们应用系统不可缺少的一个部分,若每个应用系统都重新对系统的权限进行设计,以满足不同系统用户的需求,将会浪费我们不少宝贵时间,所以花时间来设计一个相对通用的权限系统是很有意义的。 本系…

Windows客户端C/C++编程规范“建议”——表达式和运算

4 表达式和运算 4.1 比较操作中将常量设置为左值 等级: 【推荐】说明:编写代码时,如果将常量设置为右值。可能因马虎将“”写成“”导致逻辑错误。这种场景下,编译器是不会报错的,代码检查也比较容易被忽视。例子&…

GitHub标星1.5w+,从此我只用这款全能高速下载工具

「免费学习 60 节公开课:投票页面,点击讲师头像」作者 | Rocky0429来源 | Python空间(ID:Devtogether )大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻...网上资源眼花缭乱,下载的方…

CSS text-transform 属性

定义 text-transform 对元素中的字母进行控制。 继承性:Yes 说明 这个属性会改变元素中的字母大小写,而不论源文档中文本的大小写。如果值为 capitalize,则要对某些字母大写,但是并没有明确定义如何确定哪些字母要大写&#xff0c…

SeaJS基本开发原则

SeaJS基本开发原则 在讨论SeaJS的具体使用前,先介绍一下SeaJS的模块化理念和开发原则。使用SeaJS开发JavaScript的基本原则就是:一切皆为模块。引入SeaJS后,编写JavaScript代码就变成了编写一个又一个模块,SeaJS中模块的概念有点类…

SMS主站点配置详细图解:Sms2003系列之二

SMS主站点配置在上一篇文章中,我们介绍了如何进行SMS2003+SP2的部署。本文中,我们将介绍如何进行SMS主站点的配置。在SMS中,站点(site)定义并包含了所有SMS管理的对象。当我们第一次安装SMS时,实际安装的是一个SMS站点…

2019,不可错过的NLP“高光时刻”

作者 | Elvis译者 | 凯隐、夕颜出品 | AI科技大本营(ID: rgznai100)【导读】对自然语音处理(NLP)领域而言,2019年是令人印象深刻的一年,本文将回顾2019年NLP和机器学习领域的重要事件。内容 主要集中于 NLP…

Windows客户端C/C++编程规范“建议”——结构

5 结构 5.1 不要使用goto 等级: 【必须】说明:在大型项目中,goto的滥用会导致灾难性后果。因为我们程序中一般不存在从一个函数体内部跳转到另一个函数体内部的场景,所以我们可以将跳转控制在函数内部,从而避免灾难。…

WinForm容器内控件批量效验是否允许为空?设置是否只读?设置是否可用等方法分享...

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chinahuyong/article/details/47395633 WinForm容器内控件批量效验是否允许为空?设置是否只读?设置是否可用等方法分享 在WinForm程序中,我…

“不会Linux,怎么当程序员?”骨灰级程序员:干啥都不行。

说起优秀程序员的必备技能,我想大家都可以说很多,比如:数据结构、算法、数学、编程语言等等。但是,你可能会忽略了每一个程序员都应该掌握的技能:Linux。想一想,我们日常学习、求职、工作场景的中&#xff…

与空连接相关的几条命令

1)建立空连接:net use \\IP\ipc$ "" /user:"" (一定要注意:这一行命令中包含了3个空格) 2)建立非空连接:net use \\IP\ipc$ "密码" /user:"用户名" (同样有3个空格)3)映射默认共享:net use z: \\IP\c$ "密码" /u…

Windows客户端C/C++编程规范“建议”——宏

6 宏 6.1 减少宏的使用 等级: 【建议】说明:宏的使用,将使得调试变得麻烦。所以在设计和使用宏的时候,请确保宏的逻辑是阅读者不会去关心细节的行为。6.2 宏定义中字母需大写 等级: 【必须】说明:为了醒目…

Struts2中通配符的使用

1、准备工作 新建一个JavaWeb项目HelloWord,导入Struts2的.jar包,在Web.xml下配置Struts2的监听,在src下添加Struts2的配置文件struts.xml;将该项目部署到服务器(Tomcat)上,运行检查项目是否部署成功和其他错误&#x…

关于Spark NLP学习,你需要掌握的LightPipeline(附代码)| CSDN博文精选

作者 | Veysel Kocaman, Data Scientist & ML Researcher ANKIT CHOUDHARY翻译 | 赵春光校对 | 申利彬来源 | 数据派THU(*点击阅读原文,查看作者更多精彩文章)【导读】Pipeline具体来说是一个多阶段的序列,每个阶段由一个Transformer或者…

网络编程--ftp客户端的实现(c#版)

.net2.0对ftp有了一个很好的封装,但是确容易让人忽略ftp的真正内部实现,下面是我实现的ftp客户端的功能,其主要步骤是这样的:1、创建一个FtpWebRequest对象,指向ftp服务器的uri 2、设置ftp的执行方法(上传,下载等) 3、给FtpWebReq…

Windows客户端C/C++编程规范“建议”——文件

7 文件 7.1 正确使用#include 等级&#xff1a;【推荐】 说明&#xff1a;#include <>和#include “”导致编译器在搜索文件时&#xff0c;搜索的路径顺序不同。所以需要正确使用#include&#xff0c;以避免包含错了头文件。 语法形式操作带引号的形式预处理器按以下…

让你的网站支持 Emoji

SegmentFault有用户提出要支持Emoji表情输入&#xff0c;就研究了一下&#xff1a; 要记得备份数据库。 首先Mysql数据库在5.5.3之后开始支持utf8mb4字符集&#xff0c;所以mysql版本是5.5.3&#xff0b;的都可以设置让数据库存储Emoji表情&#xff0c;如果你的应用有移动端的&…

Windows客户端C/C++编程规范“建议”——变量和常量

8 变量和常量 8.1 尽量不要使用全局变量 等级&#xff1a; 【要求】说明&#xff1a;全局变量的滥用和goto的滥用一样&#xff0c;都是一种灾难。它将使得逻辑变得难以调试和控制。8.2 不涉及外部使用的全局变量需要使用static关键字修饰 等级&#xff1a; 【要求】说明&#…