从缺陷中学习CC++总结

  从本质上来说,这就是一个CC++的错题集。全书中包括63个问题引发的错误,即书名中的缺陷。共分为10章,每一张还有一个比较经典的小结,个人感觉这本书只需要仔细看一下每一章后面的小结就可以了。

  第一章主要介绍了一些由于基础知识不清楚的原因造成的错误。重点是宏的使用问题还有数据类型之间转换出现的问题。

  第二章主要扯了一下编译的问题,实话说这个不怎么会遇到。

  第三章主要讲了C++库函数使用引发的错误。

  第四章就说了一些逻辑问题,没什么用。

  第五章主要介绍C++对文件操作时出现的几个常见问题。

  第六章讲述C++内存管理问题。

  第七章主要介绍C++多线程编程时出现的几个常见问题。

  第八章讲述C++的异常处理机制,必须会正确使用try~catch。

  第九章讲述了程序中的细节对程序性能的影响。

  第十章通过良好的设计和编写规范代码实现C++程序的跨平台.。

书中的一些典型的建议如下:

1.尽量的使用其他(如内敛函数、const)来代替宏(下述三点来自google c++风格指南):

  1--用宏来实现内敛进而提高效率,可以用内敛函数来替代。

    2--用宏来存储常量,可以用const变量带替代。

    3--用宏来"缩短"长变量名,可以用引用来替代。

2.snprintf()函数通常用来代替有安全隐患的sprintf()函数。有关snprintf()函数的信息,参见C++ Reference给出的snprintf的详细说明        (http://www.cppreference.com/wiki/io/c/snprintf)。

3.最好使用strcpy()函数等来操作方法c_str()返回的指针。

        比如:最好不要这样:

          char* c;

          string s="1234";

          c = s.c_str();

        正确的用法是:

          char c[20];

          string s="1234";

          strcpy(c,s.c_str());

        c_str()返回的是一个临时指针,不能对其进行操作。这样就不存在野指针的问题。

4.注意memcpy和strcpy的使用区别

5.在使用string的时候,尽量使用string内部提供的字符串函数来操作string。C++库函数最好的说明文档就是:http://www.cplusplus.com/reference/

6.自己负责产生的内存空间,自己负责释放。 一般来说,new[]一定要和delete[]对应。

7.C++最强大的就在于对内存的支配权。所以学好内存的使用和管理。

最后说两个知识点。

一:名词Coredump:

  许多程序和操作系统出错时会自动生成一个coredump文件,通常情况下coredmp包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息等,即程序的当前状态。我们可以从coredump中分析出错误的原因。

二:Char转为int和int转化为char的问题

  注意类型的截断和扩展。特别是char, unsigned char, unsigned int, int, short等之类的赋值, 要注意Char转为int时高位符号扩展的问题 。如果必须要进行类型转换的话,建议用c++标准的static_cast<int> 。

《从缺陷中学习CC++》总结的更多相关文章

  1. 《FLASH PROGRAMMING 那些事》总结

    注明来自 http://www.ssdfans.com/?p=5589 以MLC为例: 对FGF(Floating Gate Flash)技术的,MLC programming一般分两步走:先prog ...

  2. Implementation of Serial Wire JTAG flash programming in ARM Cortex M3 Processors

    Implementation of Serial Wire JTAG flash programming in ARM Cortex M3 Processors The goal of the pro ...

  3. [原创] Keil uVision5 下载程序 add flash programming algorithm选项缺少需要的算法解决办法

    MDK开发环境从V4升级到V5后,支持包不再是集成到开发环境当中,而是封装在PACK中,需要自行安装,比较麻烦. 搭建MDK开发环境以及破解的方法,在前面的文章中有详细说明,这里不再赘述,有兴趣的可以 ...

  4. Turtelizer 2 provide JTAG Flash programming and debugging of ARM based boards via USB

    http://www.ethernut.de/en/hardware/turtelizer/ Introducing Turtelizer 2 Overview Turtelizer 2 had be ...

  5. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.3)- 串行NOR Flash下载算法(J-Link工具篇)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是J-Link工具下i.MXRT的串行NOR Flash下载算法设计. 在i.MXRT硬件那些事系列之<在串行NOR Flash X ...

  6. Programming Internal Flash Over the Serial Wire Debug <SWD> Interface -- EFM32

    1 Debug Interface Overview 1.1 Serial Wire Debug Serial Wire Debug (SWD) is a two-wire protocol for ...

  7. Error:Flash Download Failed-"Cortex-M3"

    Error:Flash Download Failed-"Cortex-M3"出现一般有两种情况: 1.SWD模式下,Debug菜单中,Reset菜单选项(Autodetect/H ...

  8. STM32F4读写内部FLASH【使用库函数】

    STM32F4Discovery开发帮使用的STM32F407VGT6芯片,内部FLASH有1M之多.平时写的代码,烧写完之后还有大量的剩余.有效利用这剩余的FLASH能存储不少数据.因此研究了一下S ...

  9. Flash Download Failed-"Cortex-M3"

    rror:Flash Download Failed-"Cortex-M3"出现一般有两种情况: 1.SWD模式下,Debug菜单中,Reset菜单选项(Autodetect/HW ...

  10. Stm32_调试出现 Error:Flash Download Failed-"Cortex-M3"

    rror:Flash Download Failed-"Cortex-M3"出现一般有两种情况: 1.SWD模式下,Debug菜单中,Reset菜单选项(Autodetect/HW ...

随机推荐

  1. Java面试必问:ThreadLocal终极篇 淦!

    点赞再看,养成习惯,微信搜一搜[敖丙]关注这个互联网苟且偷生的程序员. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的系列 ...

  2. Mosquitto的搭建(websocket、ssl、auth-plug)及坑点总结

    Mosquitto的搭建及坑点总结 主要讲述的是eclipse-mosquitto的C语言版本的搭建,主要是为了从1.4.15版本升级到1.6.9,为解决一些webSocket和数据格式问题. 因为根 ...

  3. 第十四章 JDK新特性回顾

    14.1.JDK5新特性回顾 自动装箱.拆箱 静态导入 增强for循环 可变参数 枚举 泛型 元数据 14.2.JDK7新特性回顾 对Java集合(Collections)的增强支持 在switch中 ...

  4. Web压测工具之Webbench和http_load

    Webbench简介 是知名的网站压力测试工具,能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况. webbench的标准测试可以向我们展示服务器的两项内容:每秒钟相应请求数和每 ...

  5. MacOS安装npm

    原文链接:https://www.cnblogs.com/zmdComeOn/p/11543441.html 第一步:检查brew -v是否安装了homebrew这个MacOS 缺失的软件包的管理器. ...

  6. Oracle 忘记密码 如何修改

    原文链接:https://jingyan.baidu.com/article/358570f6aaa1efce4724fcdf.html ️打开运行窗口 ️输入sqlplus "/ as s ...

  7. numpy第三方库

    # 导入numpy 并赋予别名 np import numpy as np # 创建数组的常用的几种方式(列表,元组,range,arange,linspace(创建的是等差数组),zeros(全为 ...

  8. PHP rad2deg() 函数

    实例 把弧度转换为角度: <?phpecho rad2deg(pi()) . "<br>";echo rad2deg(pi()/4);?>高佣联盟 www. ...

  9. 《Python与量化投资:从基础到实战》PDF高清完整版-PDF|网盘下载附提取码

    本书主要讲解如何利用Python进行量化投资,包括对数据的获取.整理.分析挖掘.信号构建.策略构建.回测.策略分析等.本书也是利用Python进行数据分析的指南,有大量的关于数据处理分析的应用,并将重 ...

  10. 5.15 牛客挑战赛40 E 小V和gcd树 树链剖分 主席树 树状数组 根号分治

    LINK:小V和gcd树 时限是8s 所以当时好多nq的暴力都能跑过. 考虑每次询问暴力 跳父亲 这样是nq的 4e8左右 随便过. 不过每次跳到某个点的时候需要得到边权 如果直接暴力gcd的话 nq ...