【C++编程规范】编程需要避免的常见错误
前言
C++有不少陷阱或者容易失误的地方,稍不注意就会导致程序bug。
正文
1.无符号数和有符号数比较
#define只是简单的文本替换,如果替换的是简单数值,默认是int,和unsigned int比较或者位操作会隐式类型转换,结果可能不是我们期望的。
2. case和break配对出现
switch case break的语法中,case下的丢失了break就会继续下一个case的处理,代码检视需关注新增case是否有配对的break。
3.动态内存多次释放
内存的申请与释放应该存在配对关系,一次申请只对应一个释放出口,并且必定会有一个释放出口,释放内存前判断指针是否为NULL。
4.动态库的调用和实现不一致
调用动态库时接口声明不一致,程序可以编译通过但运行失败。
5.函数返回临时变量
6.C字符串和string不可混用
C和string并不一样,需要混合使用时需进行转换。
7.数组长度越界
从文件读取记录,记录的长度往往是不确定的,出现一些超级长的记录很有可能,最好对输入长度进行判断,对超长的字符串采取保护措施,另外也可以用string代替字符串。
8. 文件操作
feof和fgets的返回值均要做判断, 根据返回值做处理。
9.数据类型的边界值判定
用int或者unsigned int等类型的值做判定时,需要注意不要超过边界值,比如不要用一个int和999999999999进行比较,超过int边界后的比较都是未定义的。
10.输入输出函数族使用错误
经常出现的错误是类型不匹配,导致访问越界。
11.数组下标保护
对数组进行下标操作时,要保证下标不越界。
12.函数的形参和实参不一致
不提倡使用隐式类型转换,如果实参是int*,形参是unsigned int*这种,函数内部处理的结果可能出乎意料。
13.野指针
释放指针指向的内存后及时置为NULL,使用指针前要判断是否为NULL。
14.构造函数的使用
类的所有成员都应当在构造函数中进行初始化,另外对类成员的初始化也只应该由构造函数进行,不要使用memset等内存操作函数对类对象进行操作。
15.动态库的内存释放
动态库有申请内存时,最好由动态库自行释放,避免模块耦合过深。
16.多线程链接数据库的设计
一个简化处理多线程链接数据库的方法是:并发控制交给数据库来做,程序的每个线程创建一个数据库链接。
17.多线程编程
需要用到一些不可重入函数时谨慎使用,对不可重入函数的调用加锁保护,另外有一些C库函数提供有可重入版本,多线程编程时调用对应的重入函数。
18.配对出现
new/delete、malloc/free、fopen/fclose、popen/pclose等需要配对出现的C库调用或者系统调用需检查是否严格配对,包括所有case。
19.STL容器
迭代器的边界通常是前闭后开区间,避免越界取值。
小结
暂时想到的就这些,欢迎朋友们补充。
【C++编程规范】编程需要避免的常见错误的更多相关文章
- 《设计模式之美》 <03>面向对象、设计原则、设计模式、编程规范、重构,这五者有何关系?
面向对象 现在,主流的编程范式或者是编程风格有三种,它们分别是面向过程.面向对象和函数式编程.面向对象这种编程风格又是这其中最主流的.现在比较流行的编程语言大部分都是面向对象编程语言.大部分项目也都是 ...
- Batsing的网页编程规范(HTML/CSS/JS/PHP)
特别注意!!!我这里的前端编程规范不苟同于Bootstrap的前端规范. 因为我和它的目的不同,Bootstrap规范是极简主义,甚至有些没有考虑到兼容性的问题. 我的规范是自己从编程实践中总结出来的 ...
- Python 编程规范-----转载
Python编程规范及性能优化 Ptyhon编程规范 编码 所有的 Python 脚本文件都应在文件头标上 # -*- coding:utf-8 -*- .设置编辑器,默认保存为 utf-8 格式. ...
- 华为C语言编程规范
DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd ...
- 中兴软件编程规范C/C++
Q/ZX 深圳市中兴通讯股份有限公司企业标准 (设计技术标准) Q/ZX 04.302.1–2003 软件编程规范C/C++ 20 ...
- Java编程规范实践
一个好的编程规范可以让代码易于理解,具体的操作却不必如此麻烦. 本文包含以下内容: Eclipse Java代码Formatter配置 Eclipse 代码模板配置 自动添加Javadoc注释 附录: ...
- (转)C++ 编程规范
转载地址:http://www.cnblogs.com/len3d/archive/2008/02/01/1061902.html C/C++编码规范 今天人们越来越明白软件设计更多地是一种工程,而不 ...
- .Net程序员学用Oracle系列(3):数据库编程规范
<.Net程序员学用Oracle系列:导航目录> 本文大纲 1.书写规范 1.1.大小写风格 1.2.缩进风格 1.3.换行 1.4.其它 2.命名规范 2.1.数据库对象命名 2.2.变 ...
- iOS扩展——Objective-C开发编程规范
最近准备开始系统学习一个完整项目的开发流程和思路,在此之前,我们需要对iOS的开发变成规范进行更系统和详尽的学习,随意对编程规范进行了整理和学习.本文内容主要转载自:Objective-C-Codin ...
- FangDD Java编程规范
我们采用<Oracle/Sun原生的Java编程规范>和<Google Java编程规范> Google Java编程风格指南 January 20, 2014 作者:Haws ...
随机推荐
- Android开发之View动画效果插补器Interpolator
插补器Interpolator 官网描述:An interpolator defines the rate of change of an animation. This allows the bas ...
- Android开发之异步消息处理机制Handler
更加详细的介绍Handler的博文-http://blog.csdn.net/guolin_blog/article/details/9991569 Android中的异步消息处理主要有四个部分组成, ...
- Java之数组array和集合list、set、map
之前一直分不清楚java中的array,list.同时对set,map,list的用法彻底迷糊,直到看到了这篇文章,讲解的很清楚. 世间上本来没有集合,(只有数组参考C语言)但有人想要,所以有了集合 ...
- 如何把Excel另存为XML格式文件(快速转换)
这时,我们尝试另存为另一种文件类型: XML电子表格2003(*.xml)
- autofac 学习记录
builder.RegisterModule(new ConfigurationSettingsReader()); 需要注册上面一句才能读到.config里的节点,xml配置方式如下 <con ...
- js jquery版本的 金额千分位转换函数(非正则,效率极高)
没想到js里面没有 金额千分位格式化的处理函数(例:1,234.01 这样的格式),网上搜了一圈,都是使用正则的方式处理的.正则的效率不敢恭维啊,又耗费资源速度又慢(虽然处理起来会直观一些). 因此专 ...
- 【Markdown】Writing on Github - 在GitHub上写作
Writing on GitHub https://github.com/shalliestera/Writing-on-GitHub-Chinese-Translation Markdown 基本语 ...
- WCF配置文件详解(一)
<?xml version="1.0" encoding="utf-8" ?><configuration> <!-- &l ...
- 根据Excel列类型获取列的值
using System.Data; using System.IO; using System.Text; using System.Web; using NPOI.SS.UserModel; us ...
- vs2013 报错AccessViolationException 解决方案
最近 用vs2013 vs2010开发一个web 项目的时候 报AccessViolationException 异常 ,找不到原因 后边网上看了解决方法,试了一下 解决了,具体什么原因搞不清. 下 ...