从缺陷中学习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. MySQL之字段数据类型和列属性

    数据类型: 对数据进行统一的分类,从系统的角度出发,为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中将数据类型分成了三大类:数值类型.字符串类型.时间日期类型. 数值型: 数值型数据: ...

  2. springboot(4)Druid作为项目数据源(添加监控)

    参考博客:恒宇少年:https://www.jianshu.com/p/e84e2709f383 Druid简介 Druid是一个关系型数据库连接池,它是阿里巴巴的一个开源项目.Druid支持所有JD ...

  3. 如何在Windows、Linux系统中安装Redis

    一:Windos下安装Redis并设置自动启动 1.下载windows版本的Redis 去官网找了很久,发现原来在官网上可以下载的windows版本的,现在官网已经没有windows版本的下载地址,只 ...

  4. 利用updatexml()报错注入mysql

    基本介绍一下updatexml() updatexml(XML_document, XPath_string, new_value) XML_document是文档对象的名称 XPath_string ...

  5. 最长公共子序列dp入门

    #include <iostream> #include <string> #include <string.h> #include <vector> ...

  6. 进度条函数 -------ajax初试

    做一个显示任务完成情况的进度条: <!DOCTYPE html> <html> <head> <meta charset="utf-8"& ...

  7. python爬虫基础要学什么,有哪些适合新手的书籍与教程?

    一,爬虫基础: 首先我们应该了解爬虫是个什么东西,而不是直接去学习带有代码的内容,新手小白应该花一个小时去了解爬虫是什么,再去学习带有代码的知识,这样所带来的收获是一定比你直接去学习代码内容要多很多很 ...

  8. 点format方式输出星号字典的值是键

    dic = {'a':123,'b':456} print("{0}:{1}".format(*dic)) a:b 2020-05-08

  9. PHP xml_get_current_column_number() 函数

    定义和用法 xml_get_current_column_number() 函数获取 XML 解析器的当前列号. 如果成功,该函数则返回当前列号.如果失败,则返回 FALSE.高佣联盟 www.cge ...

  10. PHP tanh() 函数

    实例 返回不同数的双曲正切: <?php高佣联盟 www.cgewang.comecho(tanh(M_PI_4) . "<br>");echo(tanh(0.5 ...