C++ 如何学习编程C++;正确的方法

C++ 如何学习编程C++;正确的方法,c++,c,memory,gcc,C++,C,Memory,Gcc,在我的学术课程中,我一直在用C/C++编程,我的印象是我对C/C++有很好的掌握。但最近我不得不在一个蓝牙应用程序中工作,该应用程序在Linux机箱和嵌入式系统中实现了服务器和客户端。我学习了bluez蓝牙API、套接字/网络编程并编写了代码 然而,我遇到了很多问题,包括内存泄漏、分段错误以及其他与内存相关的错误。随着代码变得越来越复杂,我几乎失去了对指针、线程和套接字的控制。这让我想知道,我有很多东西要学,而他们在基本的C/C++书籍中没有说。因此,我想寻求可用的资源,这些资源将有助于以专业的

在我的学术课程中,我一直在用C/C++编程,我的印象是我对C/C++有很好的掌握。但最近我不得不在一个蓝牙应用程序中工作,该应用程序在Linux机箱和嵌入式系统中实现了服务器和客户端。我学习了bluez蓝牙API、套接字/网络编程并编写了代码

然而,我遇到了很多问题,包括内存泄漏、分段错误以及其他与内存相关的错误。随着代码变得越来越复杂,我几乎失去了对指针、线程和套接字的控制。这让我想知道,我有很多东西要学,而他们在基本的C/C++书籍中没有说。因此,我想寻求可用的资源,这些资源将有助于以专业的方式在C/C++中更好地编写代码,特别是在Linux/Mac环境(gcc编译器)中


< >编辑:因为创建的混乱而将C更改为C++。

< P>如果你<代码> MalOC/并忘记<代码>免费< /C> >,你有内存泄漏,你还需要知道什么来避免它们?这都是关于设计模式的,虽然这些模式与语言无关

当然,断层是另一个故事。。。如果你真的想知道如何正确地编写C代码,那就去拿一份标准。我不能开始对我用C写的任何东西有部分信心,除非我确切地知道标准对它的描述。对于C++,几乎一样。


<>强>编辑< /St>如果你只是C++或C++的初学者,你可能首先想读一本书,否则标准可能会很难理解。获得一本好书并从较小的项目开始是学习正确编码技术的一个很好的开端。

我认为@James McNellis的观点是最好的。每种语言都有自己的长处和短处。好的编程是利用特定工具的这些方面,以最稳定和优化的方式完成工作。只有在编写了许多程序之后,您才能预见何时是使用某种方法的最佳时机,而这正是您想要并正在寻求的编程智慧。因此,继续编写程序,并努力使其更好

这个问题太大了,太大了

简言之,除了继续前进,你几乎无能为力。你会被更多的错误击中。你唯一能做的就是保持关注,不知疲倦地寻找那些bug,并始终相信bug存在于你的代码中,而不是在编译器或你使用的某个坚实的库中。当你陷入困境时,在这里发布你的具体、狭隘的问题,并附上相关代码。到时候我们会帮你的

现在,从这里开始,它取决于你使用的语言是:C还是C++?这些是如此不同的词是不够的。如果是C++,那么我首先给出的建议是使用RAII<强>所有的时间< /强>。如果您使用的是C,那么请始终注意是什么拥有该指针,何时何地释放它,最重要的是指针指向何处。另外,始终初始化数据,尤其是指针。在时间到来之前不要介意表演,除了大型的哦表演


就这样。除此之外,发布您的具体问题,我们会解决它们。这是正确的方法™ 对于资源管理和避免内存泄漏,C++中的模式和智能指针是必不可少的。Browsing Marshall Cline的语言对学习语言的细微差别也是非常宝贵的。

< P>我从你的评论中看到,你认为C和C++中的内存管理是一样的。事实上,这是一个完全不同的故事

由于C++中的异常> <代码>,您得到了一种管理错误检查和资源管理的新的更好的方法。标准做法称为


对于初学者,请阅读以下内容:


然后是一些好书:

我关于处理代码中的内存和正确性问题的开始建议不是从语言开始,而是从软件实践开始:

  • 一次编程一点,然后测试
  • 测试,测试,测试!在可行的情况下进行单元测试。尽早并逐步捕获错误
通过艰苦的经验,我发现C和C++肯定会惩罚你,你不用测试代码就越长。我敢打赌,您已经试着调试了足够多的这些问题,知道在一个非平凡大小的未经测试的代码库中发现问题可能会让人困惑和痛苦

对于有助于你沿着这些路线发展纪律的书籍,我推荐安德鲁·亨特和大卫·托马斯作为一个起点,艾迪生·韦斯利专业出版社,1999年

提示,我对C和C++的具体说明是:

  • 除非需要,否则不要动态分配
  • 像鹰一样观察动态内存分配(malloc/new)。确保您已经准确地考虑了对象的所有者,并在创建对象后负责删除它们——即使是在异常情况下!(这就是资源获取的关键所在。)设计代码,使这种所有权具有逻辑性和可预测性
  • 使用Valgrind、Purify和其他类似的工具来帮助捕获和诊断内存问题
关于Stack Overflow的两本书(顺便说一句,这是一个很好的列表!)我认为在以下方面对您最有帮助:

  • ,Bruce Eckel和Chuck Allison,Prentice Hall,2003年
  • Andrew Koenig和Barbara Moo,Addison-Wesley Professional,2000年

很多都将通过经验学习。你可以不停地阅读,但很多时候你只需要投入其中。我要说的一件事是使用符号调试器。设置断点并准确查看所有变量将加快查找问题并将其修复10倍。

我认为尽早认识并接受以下内容很重要:

C++不是C、C和C++的超集,是两种不同的语言,有着明显的差异。