From d0de5c787c4fa3d24c63db44ba552557f51722f2 Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Mon, 1 Aug 2016 15:48:09 +0800 Subject: [PATCH] typo --- ex17.md | 2 +- ex20.md | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ex17.md b/ex17.md index ba09952..dc9eca6 100644 --- a/ex17.md +++ b/ex17.md @@ -225,7 +225,7 @@ int main(int argc, char *argv[]) 用于错误报告的 `errno`和`perror` -当函数返回了一个错误时,它通常设置一个叫做`errno`的“外部”变量,来描述发生了什么错误。它们知识数字,所以你可以使用`peeror`来“打印出错误信息”。 +当函数返回了一个错误时,它通常设置一个叫做`errno`的“外部”变量,来描述发生了什么错误。它们只是数字,所以你可以使用`perror`来“打印出错误信息”。 文件函数 diff --git a/ex20.md b/ex20.md index ce78241..deb0767 100644 --- a/ex20.md +++ b/ex20.md @@ -10,7 +10,7 @@ ## C的错误处理问题 -几乎每个编程语言中,错误处理都非常难。有些语言尽可能试图避免错误这个概念,而另一些语言发明了复杂了控制结构,比如异常来传递错误状态。当然的错误大多是因为程序员嘉定错误不会发生,并且这一乐观的思想影响了他们所用和所创造的语言。 +几乎每个编程语言中,错误处理都非常难。有些语言尽可能试图避免错误这个概念,而另一些语言发明了复杂了控制结构,比如异常来传递错误状态。当然的错误大多是因为程序员假定错误不会发生,并且这一乐观的思想影响了他们所用和所创造的语言。 C通过返回错误码或设置全局的`errno`值来解决这些问题,并且你需要检查这些值。这种机制可以检查现存的复杂代码中,你执行的东西是否发生错误。当你编写更多的C代码时,你应该按照下列模式: @@ -90,7 +90,7 @@ dbg.h:10 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 @@ -122,7 +122,7 @@ dbg.h:28 ## 使用dbg.h -下面是一个例子,在一个小的程序中使用了`dbg.h`的所有函数。这实际上并没有做什么事情,知识想你演示了如何使用每个宏。我们将在接下来的所有程序中使用这些宏,所有要确保理解了如何使用它们。 +下面是一个例子,在一个小的程序中使用了`dbg.h`的所有函数。这实际上并没有做什么事情,只是向你演示了如何使用每个宏。我们将在接下来的所有程序中使用这些宏,所有要确保理解了如何使用它们。 ```c #include "dbg.h" @@ -268,9 +268,9 @@ $ ./ex20 test 看到`check`失败之后,它是如何打印具体的行号了吗?这会为接下来的调试工作节省时间。同时也观察`errno`被设置时它如何打印错误信息。同样,这也可以节省你调试的时间。 -## C预处理器如果扩展宏 +## C预处理器如何扩展宏 -现在我会想你简单介绍一些预处理器的工作原理,让你知道这些宏是如何工作的。我会拆分`dbg.h`中阿最复杂的宏并且让你运行`cpp`来让你观察它实际上是如何工作的。 +现在我会向你简单介绍一些预处理器的工作原理,让你知道这些宏是如何工作的。我会拆分`dbg.h`中阿最复杂的宏并且让你运行`cpp`来让你观察它实际上是如何工作的。 假设我有一个函数叫做`dosomething()`,执行成功是返回0,发生错误时返回-1。每次我调用`dosomething`的时候,我都要检查错误码,所以我将代码写成这样: