前言

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++编程规范】编程需要避免的常见错误的更多相关文章

  1. 《设计模式之美》 <03>面向对象、设计原则、设计模式、编程规范、重构,这五者有何关系?

    面向对象 现在,主流的编程范式或者是编程风格有三种,它们分别是面向过程.面向对象和函数式编程.面向对象这种编程风格又是这其中最主流的.现在比较流行的编程语言大部分都是面向对象编程语言.大部分项目也都是 ...

  2. Batsing的网页编程规范(HTML/CSS/JS/PHP)

    特别注意!!!我这里的前端编程规范不苟同于Bootstrap的前端规范. 因为我和它的目的不同,Bootstrap规范是极简主义,甚至有些没有考虑到兼容性的问题. 我的规范是自己从编程实践中总结出来的 ...

  3. Python 编程规范-----转载

    Python编程规范及性能优化 Ptyhon编程规范 编码 所有的 Python 脚本文件都应在文件头标上 # -*- coding:utf-8 -*- .设置编辑器,默认保存为 utf-8 格式. ...

  4. 华为C语言编程规范

    DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd ...

  5. 中兴软件编程规范C/C++

    Q/ZX 深圳市中兴通讯股份有限公司企业标准 (设计技术标准) Q/ZX 04.302.1–2003      软件编程规范C/C++                               20 ...

  6. Java编程规范实践

    一个好的编程规范可以让代码易于理解,具体的操作却不必如此麻烦. 本文包含以下内容: Eclipse Java代码Formatter配置 Eclipse 代码模板配置 自动添加Javadoc注释 附录: ...

  7. (转)C++ 编程规范

    转载地址:http://www.cnblogs.com/len3d/archive/2008/02/01/1061902.html C/C++编码规范 今天人们越来越明白软件设计更多地是一种工程,而不 ...

  8. .Net程序员学用Oracle系列(3):数据库编程规范

    <.Net程序员学用Oracle系列:导航目录> 本文大纲 1.书写规范 1.1.大小写风格 1.2.缩进风格 1.3.换行 1.4.其它 2.命名规范 2.1.数据库对象命名 2.2.变 ...

  9. iOS扩展——Objective-C开发编程规范

    最近准备开始系统学习一个完整项目的开发流程和思路,在此之前,我们需要对iOS的开发变成规范进行更系统和详尽的学习,随意对编程规范进行了整理和学习.本文内容主要转载自:Objective-C-Codin ...

  10. FangDD Java编程规范

    我们采用<Oracle/Sun原生的Java编程规范>和<Google Java编程规范> Google Java编程风格指南 January 20, 2014 作者:Haws ...

随机推荐

  1. Android开发之View动画效果插补器Interpolator

    插补器Interpolator 官网描述:An interpolator defines the rate of change of an animation. This allows the bas ...

  2. Android开发之异步消息处理机制Handler

    更加详细的介绍Handler的博文-http://blog.csdn.net/guolin_blog/article/details/9991569 Android中的异步消息处理主要有四个部分组成, ...

  3. Java之数组array和集合list、set、map

    之前一直分不清楚java中的array,list.同时对set,map,list的用法彻底迷糊,直到看到了这篇文章,讲解的很清楚. 世间上本来没有集合,(只有数组参考C语言)但有人想要,所以有了集合 ...

  4. 如何把Excel另存为XML格式文件(快速转换)

    这时,我们尝试另存为另一种文件类型: XML电子表格2003(*.xml)

  5. autofac 学习记录

    builder.RegisterModule(new ConfigurationSettingsReader()); 需要注册上面一句才能读到.config里的节点,xml配置方式如下 <con ...

  6. js jquery版本的 金额千分位转换函数(非正则,效率极高)

    没想到js里面没有 金额千分位格式化的处理函数(例:1,234.01 这样的格式),网上搜了一圈,都是使用正则的方式处理的.正则的效率不敢恭维啊,又耗费资源速度又慢(虽然处理起来会直观一些). 因此专 ...

  7. 【Markdown】Writing on Github - 在GitHub上写作

    Writing on GitHub https://github.com/shalliestera/Writing-on-GitHub-Chinese-Translation Markdown 基本语 ...

  8. WCF配置文件详解(一)

    <?xml version="1.0" encoding="utf-8" ?><configuration>    <!-- &l ...

  9. 根据Excel列类型获取列的值

    using System.Data; using System.IO; using System.Text; using System.Web; using NPOI.SS.UserModel; us ...

  10. vs2013 报错AccessViolationException 解决方案

    最近 用vs2013 vs2010开发一个web 项目的时候  报AccessViolationException 异常 ,找不到原因 后边网上看了解决方法,试了一下 解决了,具体什么原因搞不清. 下 ...