|
|
1
5
|
|
|
2
3
你已经找到了一个很好的资源,所以。 当然,您正在编译,所有警告都打开了,是吗? 通过做来学习在很大程度上取决于编译器的质量和它提供给您的警告/错误。在这方面,我在Linux/POSIX世界中发现的最好之处是 clang . 很好地跟踪错误的来源,并很好地告诉您丢失的头文件。 |
|
|
3
1
一些提示:
是
|
|
|
4
1
学习使用gdb单步执行代码并打印变量值(使用-g编译以启用调试符号)。 使用valgrind检查内存泄漏和其他相关问题(如堆损坏)。 |
|
|
5
1
C语言不会做任何你没有明确告诉它要做的事情。 没有自动调用的析构函数,这是好的和坏的(因为析构函数中的错误可能是痛苦的)。 获得某种自动析构函数行为的一个简单方法是使用作用域来构造和析构函数。这可能会变得很难看,因为嵌套范围会将事情进一步向右移动。
尽量使代码看起来像这样会有所帮助,尽管这并不总是可能的。 制作一组宏或内联函数来初始化对象是一个好主意。还可以创建另一组函数来分配对象的内存并将其传递给初始值设定项函数。这允许轻松初始化本地和动态分配的对象。类似于析构函数的操作也是一个好主意。 在许多情况下,使用OO技术是很好的实践,而在C中这样做只需要多一点类型(但允许更多的控制)。如果可以保持接口不变,则推杆、getter和其他助手函数可以帮助保持对象处于一致状态,并减少在发现错误时必须进行的更改。
你也应该看看
通常,你希望避免在C中使用类似的异常。我通常也试图避免在C++中使用它们,而只使用它们来处理非常糟糕的错误——那些不应该发生的错误。避免它们的一个主要原因是在C中没有神奇地进行析构函数调用,因此非本地goto经常会泄漏(或以其他方式搞砸)某种类型的资源。也就是说,在C中有一些东西提供了类似的功能。
C中的主要异常机制是
其他类似于异常的功能更特定于平台,但包括信号(它们有自己的gotchas)。 其他需要注意的是:
这个
这个
|