提交 d0de5c78 编写于 作者: W wizardforcel

typo

上级 a6160864
...@@ -225,7 +225,7 @@ int main(int argc, char *argv[]) ...@@ -225,7 +225,7 @@ int main(int argc, char *argv[])
用于错误报告的 `errno``perror` 用于错误报告的 `errno``perror`
当函数返回了一个错误时,它通常设置一个叫做`errno`的“外部”变量,来描述发生了什么错误。它们知识数字,所以你可以使用`peeror`来“打印出错误信息”。 当函数返回了一个错误时,它通常设置一个叫做`errno`的“外部”变量,来描述发生了什么错误。它们只是数字,所以你可以使用`perror`来“打印出错误信息”。
文件函数 文件函数
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
## C的错误处理问题 ## C的错误处理问题
几乎每个编程语言中,错误处理都非常难。有些语言尽可能试图避免错误这个概念,而另一些语言发明了复杂了控制结构,比如异常来传递错误状态。当然的错误大多是因为程序员定错误不会发生,并且这一乐观的思想影响了他们所用和所创造的语言。 几乎每个编程语言中,错误处理都非常难。有些语言尽可能试图避免错误这个概念,而另一些语言发明了复杂了控制结构,比如异常来传递错误状态。当然的错误大多是因为程序员定错误不会发生,并且这一乐观的思想影响了他们所用和所创造的语言。
C通过返回错误码或设置全局的`errno`值来解决这些问题,并且你需要检查这些值。这种机制可以检查现存的复杂代码中,你执行的东西是否发生错误。当你编写更多的C代码时,你应该按照下列模式: C通过返回错误码或设置全局的`errno`值来解决这些问题,并且你需要检查这些值。这种机制可以检查现存的复杂代码中,你执行的东西是否发生错误。当你编写更多的C代码时,你应该按照下列模式:
...@@ -90,7 +90,7 @@ dbg.h:10 ...@@ -90,7 +90,7 @@ dbg.h:10
dbg.h:11 dbg.h:11
用于替代的`#define debug`,它将任何使用`debug("format", arg1, arg2)`的地方替换成`fprintf``stderr`的调用。许多程序员并不知道,但是你的确可以创建列斯与`printf`的可变参数宏。许多C编译器(实际上是C预处理器)并不支持它,但是gcc可以做到。这里的魔法是使用`##__VA_ARGS__`,意思是将剩余的所有额外参数放到这里。同时也要注意,使用了`__FILE__``__LINE__`来获取当前`fine:line`用于调试信息。这会非常有帮助。 用于替代的`#define debug`,它将任何使用`debug("format", arg1, arg2)`的地方替换成`fprintf``stderr`的调用。许多程序员并不知道,但是你的确可以创建`printf`类似的可变参数宏。许多C编译器(实际上是C预处理器)并不支持它,但是gcc可以做到。这里的魔法是使用`##__VA_ARGS__`,意思是将剩余的所有额外参数放到这里。同时也要注意,使用了`__FILE__``__LINE__`来获取当前`fine:line`用于调试信息。这会非常有帮助。
dbg.h:12 dbg.h:12
...@@ -122,7 +122,7 @@ dbg.h:28 ...@@ -122,7 +122,7 @@ dbg.h:28
## 使用dbg.h ## 使用dbg.h
下面是一个例子,在一个小的程序中使用了`dbg.h`的所有函数。这实际上并没有做什么事情,知识想你演示了如何使用每个宏。我们将在接下来的所有程序中使用这些宏,所有要确保理解了如何使用它们。 下面是一个例子,在一个小的程序中使用了`dbg.h`的所有函数。这实际上并没有做什么事情,只是向你演示了如何使用每个宏。我们将在接下来的所有程序中使用这些宏,所有要确保理解了如何使用它们。
```c ```c
#include "dbg.h" #include "dbg.h"
...@@ -268,9 +268,9 @@ $ ./ex20 test ...@@ -268,9 +268,9 @@ $ ./ex20 test
看到`check`失败之后,它是如何打印具体的行号了吗?这会为接下来的调试工作节省时间。同时也观察`errno`被设置时它如何打印错误信息。同样,这也可以节省你调试的时间。 看到`check`失败之后,它是如何打印具体的行号了吗?这会为接下来的调试工作节省时间。同时也观察`errno`被设置时它如何打印错误信息。同样,这也可以节省你调试的时间。
## C预处理器如扩展宏 ## C预处理器如扩展宏
现在我会你简单介绍一些预处理器的工作原理,让你知道这些宏是如何工作的。我会拆分`dbg.h`中阿最复杂的宏并且让你运行`cpp`来让你观察它实际上是如何工作的。 现在我会你简单介绍一些预处理器的工作原理,让你知道这些宏是如何工作的。我会拆分`dbg.h`中阿最复杂的宏并且让你运行`cpp`来让你观察它实际上是如何工作的。
假设我有一个函数叫做`dosomething()`,执行成功是返回0,发生错误时返回-1。每次我调用`dosomething`的时候,我都要检查错误码,所以我将代码写成这样: 假设我有一个函数叫做`dosomething()`,执行成功是返回0,发生错误时返回-1。每次我调用`dosomething`的时候,我都要检查错误码,所以我将代码写成这样:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册