从缺陷中学习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. python-study-文件操作

    # 一.文件操作的作用 :读取内容.写入内容.备份内容.... # 文件的基本操作,文件操作包含:打开.关闭.读.写.复制.... # 打开 读写 关闭 # 文件备份 # 文件和文件夹的操作 # 总结 ...

  2. Java应用服务器之tomcat会话复制集群配置

    会话是识别用户,跟踪用户访问行为的一个手段,通过cookie(存在客户端)或session(存在服务端)来判断本次请求是那个客户端发送过来:常用的会话保持有绑定会话,就是前边我们聊的在代理上通过算法或 ...

  3. rpm -ivh vsftpd-3.0.2-22.el7.x86_64.rpm出现error: open of vsftpd-3.0.2-22.el7.x86_64.rpm failed: No such file or directory的解决方法

    情况一: 出现如图问题, 我当时的问题是通过安装rpmbuild工具软件解决的 以前制作rpm时,没有遇到过这个问题,几经搜索也没有解决.后来发现当前的centos没有安装 rpmbuild 工具软件 ...

  4. 我是如何从零开始自学转行IT并进入世界500强实现薪资翻倍?

    本部分内容对应视频链接. 熟悉我的朋友应该知道,我本科及硕士期间所学的专业都是机械相关,毕业两年之后才从零开始自学转行成为一名程序员.当时我写了一篇文章,介绍我的转行经历,很多小伙伴因为我的这篇文章, ...

  5. Ubuntu Linux markdown编辑工具 typora 安装

    Typora简介 Typora是一款轻便简洁的Markdown编辑器,支持即时渲染技术,这也是与其他Markdown编辑器最显著的区别.即时渲染使得你写Markdown就想是写Word文档一样流畅自如 ...

  6. intel:spectre&Meltdown侧信道攻击(一)

    只要平时对安全领域感兴趣的读者肯定都听过spectre&Meltdown侧信道攻击,今天简单介绍一下这种攻击的原理( https://www.bilibili.com/video/av1814 ...

  7. C 语言学习 -1

    头文件  stdio.h stdlib.h sting.h 先学习上面三个头文件: 1: stdio.h  这个头文件包含了 程序与外界数据交互的各种函数 说白了就是    用来处理     输入/输 ...

  8. DeepVO: Towards End-to-End Visual Odometry with Deep Recurrent Convolutional Neural Networks

    1.Introduction DL解决VO问题:End-to-End VO with RCNN 2.Network structure a.CNN based Feature Extraction 论 ...

  9. 面经手册 · 第2篇《数据结构,HashCode为什么使用31作为乘数?》

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 在面经手册的前两篇介绍了<面试官都问我啥>和<认知自己的技术栈盲区 ...

  10. Java代码编写规范(转载)

    编码规范 1 前言为确保系统源程序可读性,从而增强系统可维护性,java编程人员应具有基本类似的编程风格,兹制定下述Java编程规范,以规范系统Java部分编程.系统继承的其它资源中的源程序也应按此规 ...